# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
905290 | 2024-01-12T22:32:14 Z | Ahmed57 | The Collection Game (BOI21_swaps) | C++17 | 0 ms | 0 KB |
#include <bits/stdc++.h> using namespace std; #include "swaps.h" int a[2001] = {0}; int n , xd; int x = 0; void compp(int a,int b){ if(b<=n&&a<=n){ schedule(a,b); x++; } } void bitonic(int l, int r, bool inc, bool all){ if(l==r)return ; assert(l<=r); int md=(l+r)/2; assert(((l+r)%2)==1); if(all){ bitonic(l,md,inc,1); bitonic(md+1,r,!inc,1); } for(int i = l;i<=md;i++){ assert(i+md+1-l<=xd); assert(i+md+1-l>md); compp(a[i],a[i+md+1-l]); } vector<int> vi = visit(); //if(vi.size()!=x)assert(0); x = 0; int ind = 0; for(int i = l;i<=md;i++){ assert(i+md+1-l<=xd); assert(i+md+1-l>md); if(a[i+md+1-l]>n){ if(inc){ swap(a[i],a[i+(md+1-l)]); } }else if(a[i]>n){ if(!inc){ swap(a[i],a[i+(md+1-l)]); } }else{ if(ind>=vi.size())continue; if((!inc)^(!vi[ind])){ swap(a[i],a[i+(md+1-l)]); } ind++; } } bitonic(l,md,inc,0); bitonic(md+1,r,inc,0); } void solve(int N,int V){ n = N; xd = 1; while(xd<N)xd*=2; for(int i = 1;i<=xd;i++){ a[i] = i; } bitonic(1,xd,1); vector<int> ans; for(int i = xd-N+1;i<=xd;i++){ ans.push_back(a[i]); } answer(ans); }