Submission #1243050

#TimeUsernameProblemLanguageResultExecution timeMemory
1243050nvujicaArranging Shoes (IOI19_shoes)C++20
65 / 100
32 ms13896 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; vector <int> l[maxn]; vector <int> r[maxn]; int loga[2 * maxn]; int par[2 * maxn]; void update(int x, int val){ for(x; x < maxn; x += x & -x) loga[x] += val; } int query(int x){ int ret = 0; for(x; x > 0; x -= x & -x) ret += loga[x]; return ret; } long long count_swaps(vector<int> s) { int n = s.size() / 2; long long ans = 0; for(int i = 0; i < 2 * n; i++){ int x = abs(s[i]); if(s[i] > 0) r[x].push_back(i + 1); else l[x].push_back(i + 1); } for(int i = 1; i <= n; i++){ for(int j = 0; j < l[i].size(); j++){ if(l[i][j] > r[i][j]){ ans++; par[l[i][j]] = r[i][j]; par[r[i][j]] = -1; } else { par[r[i][j]] = l[i][j]; par[l[i][j]] = -1; } } } // cout << ans << endl; for(int i = 1; i <= 2 * n; i++){ if(par[i] == -1) continue; int p = par[i]; ans += query(p); update(1, 2); update(p, -1); update(i, -1); } return 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...
#Verdict Execution timeMemoryGrader output
Fetching results...