Submission #428359

#TimeUsernameProblemLanguageResultExecution timeMemory
428359oolimryCheerleaders (info1cup20_cheerleaders)C++17
33 / 100
2075 ms2392 KiB
#include <bits/stdc++.h> using namespace std; #define sz(x) (int) (x).size() #define all(x) (x).begin(), (x).end() #define show(x) cerr << #x << " is " << x << endl; #define show2(x,y) cerr << #x << " is " << x << " " << #y << " is " << y << endl; #define show3(x,y,z) cerr << #x << " is " << x << " " << #y << " is " << y << " " << #z << " is " << z << endl; #define tern(cond, a, b) (cond ? a : b) typedef long long lint; typedef pair<lint,lint> ii; vector<int> original; vector<int> arr; vector<int> nxt; lint ans = 123123231232132LL; lint res = 0; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >> n; int N = (1<<n); original.resize(N); for(int i = 0;i < N;i++) cin >> original[i]; if(n == 0){ cout << 0; return 0; } for(int iter = 0;iter < n;iter++){ arr.clear(); for(int i = 0;i < N;i++) arr.push_back(original[i]); res = 0; for(lint gap = (1<<(n-1));gap > 0;gap >>= 1){ lint invcnt = 0; lint total = 0; for(int s = 0;s < N;s += 2*gap){ int m = s+gap, e = s+2*gap; vector<int> R; for(int i = m;i < e;i++) R.push_back(arr[i]); sort(all(R)); for(int i = s;i < m;i++){ lint pos = lower_bound(all(R), arr[i]) - R.begin(); invcnt += pos; } total += gap*gap; } //show2(invcnt, total-invcnt); if(total-invcnt < invcnt){ res += total-invcnt; } else{ res += invcnt; } } //show(res); ans = min(ans, res); //for(int i = 0;i < N;i++) cerr << arr[i] << " "; cerr << endl; nxt.clear(); for(int i = 0;i < N;i += 2) nxt.push_back(original[i]); for(int i = 1;i < N;i += 2) nxt.push_back(original[i]); swap(nxt, original); } cout << ans; }
#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...