Submission #162802

#TimeUsernameProblemLanguageResultExecution timeMemory
162802kikkatugnoArranging Shoes (IOI19_shoes)C++14
0 / 100
2 ms376 KiB
#include<iostream> #include<set> #include<vector> using namespace::std; set<pair<int,int>> s; int st[800005]; int query(int i,int l,int r,int s,int e){ if(s<=l && r<=e) return st[i]; if(s>=r || e<=l) return 0; int mid=l+(r-l)/2; return query(i*2,l,mid,s,e)+query(i*2+1,mid,r,s,e); } void point_upd(int i,int l,int r,int ind){ if(l+1==r && l==ind){ st[i]++; return; } if(ind>=r || ind<l) return ; int mid=l+(r-l)/2; st[i]++; if(ind>=mid) point_upd(i*2+1,mid,r,ind); else point_upd(i*2,l,mid,ind); } int count_swaps(vector<int,allocator<int>> ar){ int n=ar.size(); //cin>>n; long long int ans=0; for(int i=0;i<2*n;i++) /*cin>>ar[i],*/s.insert({ar[i],i}); //build(1,0,2*n); for(int i=0;i<2*n;i++) if(s.find({ar[i],i})!=s.end()){ pair<int,int> t=*(s.lower_bound({-ar[i],0})); ans+=t.second-i-(ar[i]<0)-query(1,0,2*n,i,t.second); cout<<t.second<<' '<<i<<' '<<ar[i]<<' '<<query(1,0,2*n,i,t.second)<<'\n'; point_upd(1,0,2*n,t.second); s.erase({ar[i],i}); s.erase(t); } 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...