//~ while (clock()<=69*CLOCKS_PER_SEC) //~ #pragma comment(linker, "/stack:200000000") #pragma GCC optimize("O3") //~ #pragma GCC optimize("Ofast") //~ #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") //~ #pragma GCC optimize("unroll-loops") #include <bits/stdc++.h> using namespace std; using ll=long long; using ld=long double; using pii=pair<int, int>; using pll=pair<ll, ll>; using vi=vector<int>; using vll=vector<ll>; template<class TH> void _dbg(const char *sdbg, TH h){ cerr<<sdbg<<" = "<<h<<endl; } #ifdef LOCAL #define _upgrade ios_base::sync_with_stdio(0); #define debug(...) _dbg(#__VA_ARGS__, __VA_ARGS__); #else #define _upgrade ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0); #define debug(...) 98; #define cerr if(0) cout #endif #define pb push_back #define mp make_pair #define all(x) x.begin(),x.end() #define sz(x) ((int)(x).size()) #define fi first #define se second #define erase_duplicates(x) sort(all(x)), (x).resize(distance((x).begin(), unique(all(x)))); #define watch(x) cout << (#x) << " is " << (x) << endl; #define pow2(x) ((x)*(x)) #define mod(x, m) ((((x) % (m)) + (m)) % (m)) #define max3(a, b, c) max(a, max(b, c)) #define min3(a, b, c) min(a, min(b, c)) #define REP(i, a, b) for(int i = a; i <= b; ++i) #define REPV(i, b, a) for(int i = b; i >= a; --i) const double m_pi = acos(-1.0); const int int_max = 0x3f3f3f3f; const int M7 = 1000*1000*1000+7; const int M9 = 1000*1000*1000+9; int tab[200'001]; int myPos[200'001]; int checked[200'001]; ll result[200'001]; int main() { _upgrade mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); cout<<fixed<<setprecision(15); int n, k;cin>>n>>k; REP(i,0,1){ REP(j,0,n-1){ cin>>tab[i*n + j]; myPos[tab[i*n + j]] = i*n + j; } } REP(i, 1, 2*n) { REP(j, i, 2*n) { int kkk = 0; queue<int> q; REP(ii,i,j) { int pos = myPos[ii]; if(checked[pos])continue; ++kkk; q.push(pos); while(!q.empty()) { pos = q.front(); q.pop(); if (pos >= 2*n) continue; if (pos < 0) continue; if(checked[pos]) continue; if(tab[pos] >= i && tab[pos] <= j) { checked[pos]=1; q.push(pos+n); q.push(pos-n); if(pos == n -1 || pos == n+n-1) { q.push(pos-n+1); } else { q.push(pos+1); } if(pos == 0 || pos == n) { q.push(pos+n-1); } else { q.push(pos-1); } } } } REP(ii,i,j) {checked[myPos[ii]]=0;} ++result[kkk]; // cout <<i<<" "<<j<<" "<<kkk<<endl; } } REP(i, 1, k) { cout << result[i] << " "; } return 0; } /* __builtin_popcount count total set bits on a given integer (use __builtin_popcountll for long long). */
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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | //~ while (clock()<=69*CLOCKS_PER_SEC) //~ #pragma comment(linker, "/stack:200000000") #pragma GCC optimize("O3") //~ #pragma GCC optimize("Ofast") //~ #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") //~ #pragma GCC optimize("unroll-loops") #include <bits/stdc++.h> using namespace std; using ll=long long; using ld=long double; using pii=pair<int, int>; using pll=pair<ll, ll>; using vi=vector<int>; using vll=vector<ll>; template<class TH> void _dbg(const char *sdbg, TH h){ cerr<<sdbg<<" = "<<h<<endl; } #ifdef LOCAL #define _upgrade ios_base::sync_with_stdio(0); #define debug(...) _dbg(#__VA_ARGS__, __VA_ARGS__); #else #define _upgrade ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0); #define debug(...) 98; #define cerr if(0) cout #endif #define pb push_back #define mp make_pair #define all(x) x.begin(),x.end() #define sz(x) ((int)(x).size()) #define fi first #define se second #define erase_duplicates(x) sort(all(x)), (x).resize(distance((x).begin(), unique(all(x)))); #define watch(x) cout << (#x) << " is " << (x) << endl; #define pow2(x) ((x)*(x)) #define mod(x, m) ((((x) % (m)) + (m)) % (m)) #define max3(a, b, c) max(a, max(b, c)) #define min3(a, b, c) min(a, min(b, c)) #define REP(i, a, b) for(int i = a; i <= b; ++i) #define REPV(i, b, a) for(int i = b; i >= a; --i) const double m_pi = acos(-1.0); const int int_max = 0x3f3f3f3f; const int M7 = 1000*1000*1000+7; const int M9 = 1000*1000*1000+9; int tab[200'001]; int myPos[200'001]; int checked[200'001]; ll result[200'001]; int main() { _upgrade mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); cout<<fixed<<setprecision(15); int n, k;cin>>n>>k; REP(i,0,1){ REP(j,0,n-1){ cin>>tab[i*n + j]; myPos[tab[i*n + j]] = i*n + j; } } REP(i, 1, 2*n) { REP(j, i, 2*n) { int kkk = 0; queue<int> q; REP(ii,i,j) { int pos = myPos[ii]; if(checked[pos])continue; ++kkk; q.push(pos); while(!q.empty()) { pos = q.front(); q.pop(); if (pos >= 2*n) continue; if (pos < 0) continue; if(checked[pos]) continue; if(tab[pos] >= i && tab[pos] <= j) { checked[pos]=1; q.push(pos+n); q.push(pos-n); if(pos == n -1 || pos == n+n-1) { q.push(pos-n+1); } else { q.push(pos+1); } if(pos == 0 || pos == n) { q.push(pos+n-1); } else { q.push(pos-1); } } } } REP(ii,i,j) {checked[myPos[ii]]=0;} ++result[kkk]; // cout <<i<<" "<<j<<" "<<kkk<<endl; } } REP(i, 1, k) { cout << result[i] << " "; } return 0; } /* __builtin_popcount count total set bits on a given integer (use __builtin_popcountll for long long). */ |