Submission #1238958

#TimeUsernameProblemLanguageResultExecution timeMemory
1238958yuichiro17Arranging Shoes (IOI19_shoes)C++20
10 / 100
69 ms15032 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; using ll = long long; long long count_swaps(std::vector<int> s) { int n=s.size()/2; ll ans=0; vector<vector<int>>l(n),r(n); for(int i=2*n-1;i>=0;i--){ if(s[i]>0){ r[s[i]-1].push_back(i); }else{ l[-s[i]-1].push_back(i); } } priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq; for(int i=0;i<n;i++){ if(!l[i].empty()){ pq.push({l[i].back()+abs(r[i].back()-1)+(l[i]>r[i]),i}); } } vector<int>v; for(int i=0;i<n;i++){ pair<int,int>p=pq.top(); pq.pop(); int li=l[p.second].back(),ri=r[p.second].back(); li+=v.end()-lower_bound(v.begin(),v.end(),li); ri+=v.end()-lower_bound(v.begin(),v.end(),ri); v.push_back(l[p.second].back()); v.push_back(r[p.second].back()); l[p.second].pop_back();r[p.second].pop_back(); if(!l[p.second].empty()){ pq.push({l[p.second].back()+abs(r[p.second].back()-1)+(l[p.second]>r[p.second]),p.second}); } if(li==2*i+1&&ri==2*i){ ans+=1; }else ans+=abs(li-2*i)+abs(ri-2*i-1)+(li>ri); } 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...