Submission #1272970

#TimeUsernameProblemLanguageResultExecution timeMemory
1272970arkanefuryArranging Shoes (IOI19_shoes)C++20
30 / 100
16 ms5032 KiB
#include "shoes.h" #include <bits/stdc++.h> #define sz size() #define all(v) v.begin(), v.end() #define pb push_back using namespace std; const int N = 2e5+5; int a[N], b[N], t[N*6], n; vector<int>g[N]; void upd(int pos, int v = 1, int tl = 0, int tr = n-1){ if(tl == tr){ t[v] = 1; return; } int tm = (tl + tr) >> 1; if(pos <= tm)upd(pos, v*2, tl, tm); else upd(pos, v*2+1, tm+1, tr); t[v] = t[v*2] + t[v*2+1]; } int get(int l, int r, int v = 1, int tl = 0, int tr = n-1){ if(l <= tl && tr <= r)return t[v]; if(l > tr || tl > r)return 0; int tm = (tl + tr) >> 1; return get(l, r, v*2, tl, tm) + get(l, r, v*2+1, tm+1, tr); } long long count_swaps(vector <int> v){ n = v.sz; int k; long long ans = 0; for(int i = 0; i < n; i ++){ if(v[i] < 0)g[abs(v[i]) + n].pb(i); else g[v[i]].pb(i); } for(int i = 1; i <= 2*n; i ++)reverse(all(g[i])); for(int i = 0; i < n; i ++){ if(b[i])continue; if(v[i] < 0){ int x = abs(v[i]); x = g[x][g[x].sz-1]; k = get(i, x); ans += x - i - 1 - k; b[x] = 1; upd(x); g[abs(v[i])].pop_back(); } else{ int x = v[i] + n; k = get(i, g[x][g[x].sz-1]); ans += g[x][g[x].sz-1] - i - k; upd(g[x][g[x].sz-1]); b[g[x][g[x].sz-1]] = 1; g[x].pop_back(); } } 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...