#include<iostream> using namespace std; int t[2][100010]; int czy_odw[2][100010]; pair<int,int>p[200010]; int wyn[200010]; int o[200010]; int fajnt(int a){ if(o[a]!=a)a=fajnt(o[a]); return a; } void junion(int x,int y){ x=fajnt(x); y=fajnt(y); o[x]=y; return; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,k,akt=0; cin>>n>>k; for(int i=0;i<2;i++){ for(int j=0;j<n;j++){ cin>>t[i][j]; p[t[i][j]]={i,j}; } } for(int i=1;i<=2*n;i++){ for(int j=1;j<=2*n;j++){ o[j]=j; if(j<=n+1){ czy_odw[1][j-1]=0; czy_odw[0][j-1]=0; } } akt=0; for(int j=i;j<=2*n;j++){ akt++; czy_odw[p[j].first][p[j].second]++; if(fajnt(j)!=fajnt(t[(p[j].first+1)%2][p[j].second])&&czy_odw[(p[j].first+1)%2][p[j].second]){ junion(j,t[(p[j].first+1)%2][p[j].second]); akt--; } if(fajnt(j)!=fajnt(t[p[j].first][(p[j].second+1)%n])&&czy_odw[p[j].first][(p[j].second+1)%n]){ junion(j,t[p[j].first][(p[j].second+1)%n]); akt--; } if(fajnt(j)!=fajnt(t[p[j].first][(p[j].second-1+n)%n])&&czy_odw[p[j].first][(p[j].second-1+n)%n]){ junion(j,t[p[j].first][(p[j].second-1+n)%n]); akt--; } wyn[akt]++; } } for(int i=1;i<=k;i++)cout<<wyn[i]<<' '; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include<iostream> using namespace std; int t[2][100010]; int czy_odw[2][100010]; pair<int,int>p[200010]; int wyn[200010]; int o[200010]; int fajnt(int a){ if(o[a]!=a)a=fajnt(o[a]); return a; } void junion(int x,int y){ x=fajnt(x); y=fajnt(y); o[x]=y; return; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,k,akt=0; cin>>n>>k; for(int i=0;i<2;i++){ for(int j=0;j<n;j++){ cin>>t[i][j]; p[t[i][j]]={i,j}; } } for(int i=1;i<=2*n;i++){ for(int j=1;j<=2*n;j++){ o[j]=j; if(j<=n+1){ czy_odw[1][j-1]=0; czy_odw[0][j-1]=0; } } akt=0; for(int j=i;j<=2*n;j++){ akt++; czy_odw[p[j].first][p[j].second]++; if(fajnt(j)!=fajnt(t[(p[j].first+1)%2][p[j].second])&&czy_odw[(p[j].first+1)%2][p[j].second]){ junion(j,t[(p[j].first+1)%2][p[j].second]); akt--; } if(fajnt(j)!=fajnt(t[p[j].first][(p[j].second+1)%n])&&czy_odw[p[j].first][(p[j].second+1)%n]){ junion(j,t[p[j].first][(p[j].second+1)%n]); akt--; } if(fajnt(j)!=fajnt(t[p[j].first][(p[j].second-1+n)%n])&&czy_odw[p[j].first][(p[j].second-1+n)%n]){ junion(j,t[p[j].first][(p[j].second-1+n)%n]); akt--; } wyn[akt]++; } } for(int i=1;i<=k;i++)cout<<wyn[i]<<' '; return 0; } |