Submission #266501

#TimeUsernameProblemLanguageResultExecution timeMemory
266501wdjpngArranging Shoes (IOI19_shoes)C++17
0 / 100
29 ms3072 KiB
#include <bits/stdc++.h> #define rep(i,n) for(int i = 0; i < n; i++) #define lint long long using namespace std; vector<int>T; void update(int i, int k, int n){ i++; for(;i <= n;i+=i&-i){ T[i]+=k; } } int get(int i){ i++; int s = 0; for(; i>0; i-=i&-i){ s+=T[i]; } return s; } int getRange(int l, int r){ return get(r) - get(l-1); } lint count_swaps(vector<int> s){ int n = s.size()/2; return n*(n-1)/2; T.resize(4*n+4); vector<set<int>>set(2*n+1); vector<bool>ignore(2*n); rep(i,2*n){ set[s[i]+n].insert(i); } int sum=0; rep(i,2*n){ if(ignore[i]){continue;} int nearest=*set[-s[i]+n].begin(); set[-s[i]+n].erase(set[-s[i]+n].begin()); set[s[i]+n].erase(set[s[i]+n].begin()); ignore[nearest]=true; if(s[i]>0){sum++;} sum+=nearest-i-1 - getRange(i, nearest); update(nearest,1, 2*n); } return sum; }
#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...