Submission #1225422

#TimeUsernameProblemLanguageResultExecution timeMemory
1225422Hamed_GhaffariArranging Shoes (IOI19_shoes)C++20
100 / 100
49 ms14096 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int MXN = 1e5+5; int n, val[MXN]; int fen[MXN<<1]; vector<int> vec[MXN][2]; inline void upd(int p) { for(; p<=2*n; p+=p&-p) fen[p]++; } inline int get(int p) { int res=0; for(; p; p-=p&-p) res += fen[p]; return res; } ll count_swaps(vector<int> S) { n = S.size(); n >>= 1; for(int i=0; i<(n<<1); i++) vec[abs(S[i])][S[i]<0].push_back(i); int ptr=0; for(int x=1; x<=n; x++) { for(int i=0; i<vec[x][0].size(); i++) { S[vec[x][0][i]] = ++ptr; S[vec[x][1][i]] = -ptr; } } ptr = 0; ll ans = 0; for(int i=0; i<(n<<1); i++) { if(!val[abs(S[i])]) val[abs(S[i])] = ++ptr; ans += get(2*n+1 - 2*val[abs(S[i])]+(S[i]<0)); upd(2*n+1 - 2*val[abs(S[i])]+(S[i]<0)); } 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...