Submission #675216

#TimeUsernameProblemLanguageResultExecution timeMemory
675216vjudge1Cheerleaders (info1cup20_cheerleaders)C++17
84 / 100
615 ms7180 KiB
/* #pragma GCC optimize("Ofast") #pragma GCC target("avx,avx2,fma") #pragma GCC optimize("unroll-loops") */ // lethal option #include<bits/stdc++.h> using namespace std; #define all(flg) flg.begin(), flg.end() #define int long long #define pb push_back #define fi first #define se second #define endl "\n" #define eb emplace_back #define ii pair<int, int> #define vi vector<int> #define PI 3.141592653589793238462643383279502884 #define ll long long #define ld long double #define for1(i, ff, gg) for(int i = ff; i <= gg; ++i) #define for2(i, ff, gg) for(int i = ff; i >= gg; --i) #define FOR1(i, ff, gg) for(int i = ff; i < gg; ++i) #define loopa FOR1(i, 0, (1 << n)) const ll mod = 1e9 + 7; const int maxN = 300005; const ll oo = 1e18 + 7; int n, a[maxN], b[maxN]; int x, y, z, k; int temp[maxN]; vi stat_s; vi s; int res[100]; int antires[100]; void subsolve(int sta, int ds, vi &kal){ if(ds == -1){ kal.pb(a[sta]); return; } vi f1, f2; int sz = (1 << ds); subsolve(sta, ds - 1, f1); subsolve(sta + sz, ds - 1, f2); kal.resize(sz * 2); merge(all(f1), all(f2), kal.begin()); int vl = 0; f1.pb(mod); // f2 < f1 -> inversion int id = 0; for(int cc : f2){ while(cc > f1[id]) ++id; vl += id; } // cout << sta << " " << ds << " " << vl << " " << (sz * sz) - vl << endl; res[ds] += (sz * sz) - vl; antires[ds] += vl; } pair<int, vi> best, tester; void solve(){ loopa{ b[i] = a[i]; // cout << b[i] << " "; } // cout << endl; s.clear(); memset(res, 0, sizeof(res)); memset(antires, 0, sizeof(antires)); vi kal; subsolve(0, n - 1, kal); int total = 0; FOR1(i, 0, n){ s.pb(2); if(res[i] > antires[i]) s.pb(1); total += min(res[i], antires[i]); } tester.se.clear(); tester.fi = total; // cout << total << endl; for(int cc : stat_s) tester.se.pb(cc); for(int cc : s) tester.se.pb(cc); best = min(best, tester); } signed main(){ // freopen(".inp", "r", stdin); ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); cin >> n; best.fi = oo; FOR1(i, 0, (1 << n)) cin >> a[i]; for1(i, 1, n){ stat_s.pb(2); loopa{ int mask = i + ((1 << n) * (i & 1)); mask >>= 1; temp[mask] = a[i]; } loopa a[i] = temp[i]; solve(); } cout << best.fi << endl; for(int cc : best.se) cout << cc; cout << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...