Submission #811099

#TimeUsernameProblemLanguageResultExecution timeMemory
811099OAleksaArranging Shoes (IOI19_shoes)C++14
30 / 100
1090 ms32908 KiB
#include <bits/stdc++.h> #include "shoes.h" #define f first #define s second using namespace std; const int maxn = 2e5 + 69; set<int> l[maxn], r[maxn]; vector<int> f(maxn); void add(int v, int x) { for(int i = v;i < maxn;i += (i & -i)) f[i] += x; } int qry(int v) { int res = 0; for(int i = v;i >= 1;i -= (i & -i)) res += f[i]; return res; } long long count_swaps(vector<int> s) { int n = s.size(); vector<int> a(n + 1); int m = n / 2; for(int i = 0;i < n;i++) { if(s[i] < 0) s[i] = abs(s[i]) + m; a[i + 1] = s[i]; } vector<int> vis(n + 1); vector<pair<int, int>> par; for(int i = 1;i <= n;i++) { if(a[i] > m) l[a[i]].insert(i); else r[a[i]].insert(i); } for(int i = 1;i <= n;i++) { if(a[i] > m && !vis[i]) { int x = a[i] - m; auto u = r[x].begin(); r[x].erase(u); l[a[i]].erase(i); par.push_back({i, *u}); vis[i] = vis[*u] = 1; } else if(a[i] <= m && !vis[i]) { auto u = l[a[i] + m].begin(); l[a[i] + m].erase(u); r[a[i]].erase(i); par.push_back({i, *u}); vis[i] = vis[*u] = 1; } } long long ans = 0; for(auto x : par) { int levi = x.f + qry(x.f); int desni = x.s + qry(x.s); if(a[x.f] > m) ans += (desni - levi - 1); else ans += (desni - levi); add(x.f + 1, 1); add(x.s, -1); } return ans; } // int main() // { // ios_base::sync_with_stdio(false); // cin.tie(0); // cout.tie(0); // int tt = 1; // //cin >> tt; // while(tt--) { // int n; // cin >> n; // vector<int> a(2 * n); // for(int i = 0;i < 2 * n;i++) // cin >> a[i]; // cout << count_swaps(a) << endl; // } // return 0; // }
#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...