제출 #867115

#제출 시각아이디문제언어결과실행 시간메모리
867115MalixArranging Shoes (IOI19_shoes)C++14
50 / 100
1056 ms20044 KiB
#include "shoes.h" #include<bits/stdc++.h> using namespace std; long long count_swaps(std::vector<int> s) { int n=s.size(); int pos=0; vector<int> arr(n,0); vector<int> arr2; vector<vector<int>> po(n+1); vector<vector<int>> ne(n+1); for(int i=0;i<n;i++){ if(s[i]<0)ne[-s[i]].push_back(i); else po[s[i]].push_back(i); } long long ans=0; while(pos<n){ if(arr[pos]==1){ pos++;continue; } if(s[pos]<0){ int it=po[-s[pos]][0]; po[-s[pos]].erase(po[-s[pos]].begin()); ne[-s[pos]].erase(ne[-s[pos]].begin()); int it1=lower_bound(arr2.begin(),arr2.end(),it)-arr2.begin(); int it2=lower_bound(arr2.begin(),arr2.end(),pos)-arr2.begin(); it1=arr2.size()-it1-1; it2=arr2.size()-it2-1; ans+=it-pos-1-it2+it1; s[pos]=0;s[it]=0; arr[pos]=1;arr[it]=1; arr2.push_back(it-1); } else{ int it=ne[s[pos]][0]; ne[s[pos]].erase(ne[s[pos]].begin()); po[s[pos]].erase(po[s[pos]].begin()); int it1=lower_bound(arr2.begin(),arr2.end(),it)-arr2.begin(); int it2=lower_bound(arr2.begin(),arr2.end(),pos)-arr2.begin(); it1=arr2.size()-it1-1; it2=arr2.size()-it2-1; ans+=it-pos-it2+it1; s[pos]=0;s[it]=0; arr[pos]=1;arr[it]=1; arr2.push_back(it-1); } sort(arr2.begin(),arr2.end()); pos++; } 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...