Submission #1047303

#TimeUsernameProblemLanguageResultExecution timeMemory
1047303vjudge1Arranging Shoes (IOI19_shoes)C++17
50 / 100
288 ms550376 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; const int lim=1e5+100; struct{ int tree[lim]; void update(int p,int val){ p++; while(p<lim){ tree[p]+=val; p+=p&-p; } } int query(int p){ p++; int ans=0; while(p){ ans+=tree[p]; p-=p&-p; } return ans; } int query(int l,int r){ if(r<l)return 0; return query(r)-query(l-1); } }fw; long long count_swaps(std::vector<int> s) { int ans=0; int n=s.size(); deque<int>left[n],right[n]; for(int i=0;i<n;i++){ if(s[i]<0){ if(right[-s[i]].size()){ int ind=right[-s[i]].front(); right[-s[i]].pop_front(); int k=fw.query(ind+1,i); ans+=k+i-ind; fw.update(i+1,-1); fw.update(ind,1); }else{ left[-s[i]].push_back(i); } }else{ if(left[s[i]].size()){ int ind=left[s[i]].front(); left[s[i]].pop_front(); int k=fw.query(ind+1,i); ans+=k+i-ind-1; fw.update(i+1,-1); fw.update(ind+1,1); }else{ right[s[i]].push_back(i); } } //cerr<<ans<<"\n"; } 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...