#include<bits/stdc++.h> #define il inline #define reg register int #define numb (ch^'0') using namespace std; typedef long long ll; il void rd(int &x){ char ch;bool fl=false; while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true); for(x=numb;isdigit(ch=getchar());x=x*10+numb); (fl==true)&&(x=-x); } namespace Miracle{ const int N=4e5+5; int n,m; struct node{ int nxt,to; }e[2*N]; int hd[N],cnt; void add(int x,int y){ e[++cnt].nxt=hd[x]; e[cnt].to=y; hd[x]=cnt; } int dfn[N],low[N],df,dfn2[N]; int co[N],b[N],dcc; vector<int>mem[N]; ll preno; vector<int>be[N]; int typ[N];//1:yuan 0:fang int sta[N],top; void tarjan(int x){ dfn[x]=low[x]=++df; sta[++top]=x; for(reg i=hd[x];i;i=e[i].nxt){ int y=e[i].to; if(!dfn[y]){ tarjan(y); low[x]=min(low[x],low[y]); if(low[y]>=dfn[x]){ ++dcc; int z; do{ z=sta[top]; mem[dcc].push_back(z); --top; }while(z!=y); mem[dcc].push_back(x); } }else low[x]=min(low[x],dfn[y]); } } void dfs1(int x){ dfn[x]=++df; for(reg i=hd[x];i;i=e[i].nxt){ int y=e[i].to; if(!dfn[y])dfs1(y); } dfn2[x]=df; } ll dp[N]; ll tag[N]; void dfs2(int x){ } ll ans[N]; void sol(int x){ } int main(){ rd(n);rd(m); int tot=0; for(reg i=1;i<=n;++i) rd(co[i]),b[++tot]=co[i]; sort(b+1,b+tot+1); tot=unique(b+1,b+tot+1)-b-1; for(reg i=1;i<=n;++i){ co[i]=lower_bound(b+1,b+tot+1,co[i])-b; be[co[i]].push_back(i); } for(reg i=1;i<=n;++i){ if(!dfn[i]) tarjan(i); } memset(hd,0,sizeof hd); memset(dfn,0,sizeof dfn); df=0;cnt=0; int tot=n; for(reg i=1;i<=dcc;++i){ ++tot; typ[tot]=0; for(reg j=0;j<(int)mem[i].size();++j){ typ[mem[i][j]]=1; add(tot,mem[i][j]); add(mem[i][j],tot); } } for(reg i=1;i<=tot;++i){ if(!dfn[i]){ dfs1(i); } } for(reg i=1;i<=) } } signed main(){ Miracle::main(); return 0; } /* Author: *Miracle* Date: 2019/2/19 17:48:21 */