Submission #725806

#TimeUsernameProblemLanguageResultExecution timeMemory
725806alvingogoArranging Shoes (IOI19_shoes)C++14
45 / 100
40 ms8904 KiB
#include "shoes.h" #include <bits/stdc++.h> #define fs first #define sc second using namespace std; struct BIT{ int n; vector<int> bt; void init(int x){ n=x; bt.resize(n+1); } void update(int x,int y){ for(;x<=n;x+=(x&-x)){ bt[x]+=y; } } int query(int x){ int ans=0; for(;x>0;x-=(x&-x)){ ans+=bt[x]; } return ans; } }bt; long long count_swaps(vector<int> s) { int n=s.size(); bt.init(n); long long ans=0; vector<vector<int> > gg(n/2+1); vector<pair<int,int> > t; for(int i=0;i<n;i++){ bt.update(i+1,1); if(s[i]<0){ t.push_back({-s[i],i+1}); } else{ gg[s[i]].push_back(i+1); } } for(auto &h:gg){ reverse(h.begin(),h.end()); } for(auto z:t){ bt.update(z.sc,-1); ans+=bt.query(z.sc); auto y=gg[z.fs].back(); gg[z.fs].pop_back(); bt.update(y,-1); ans+=bt.query(y); } 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...