#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; } |
English