제출 #867074

#제출 시각아이디문제언어결과실행 시간메모리
867074MalixArranging Shoes (IOI19_shoes)C++14
50 / 100
1092 ms19900 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(n,0); 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()); ans+=it-pos-1-arr2[pos]+arr2[it]; s[pos]=0;s[it]=0; arr[pos]=1;arr[it]=1; for(int i=pos+1;i<it;i++)arr2[i]++; } else{ int it=ne[s[pos]][0]; ne[s[pos]].erase(ne[s[pos]].begin()); po[s[pos]].erase(po[s[pos]].begin()); ans+=it-pos-arr2[pos]+arr2[it]; s[pos]=0;s[it]=0; arr[pos]=1;arr[it]=1; for(int i=pos+1;i<it;i++)arr2[i]++; } 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...