Submission #1292488

#TimeUsernameProblemLanguageResultExecution timeMemory
1292488MMihalevArranging Shoes (IOI19_shoes)C++20
10 / 100
1106 ms205472 KiB
#include<iostream> #include<vector> #include<queue> #include<set> #include "shoes.h" using namespace std; const int MAX_N=3e5+5; deque<int>le,re[MAX_N]; int tree[MAX_N]; int N; void Update(int pos) { pos++; for(;;) { if(pos>N)break; tree[pos]++; pos+=((pos)&(-pos)); } } int Find(int pos) { int res=0; pos++; for(;;) { if(pos<1)break; res+=tree[pos]; pos-=((pos)&(-pos)); } return res; } int pos[MAX_N]; long long count_swaps(std::vector<int> s) { N=2*s.size(); long long ans=0; int col; for(int i=0;i<s.size();i++) { pos[i]=i; if(s[i]<0)le.push_back(i); else re[s[i]].push_back(i); } for(int i=0;i<s.size();i++) { if(i%2==0) { int p; for(int j=i;j<s.size();j++) { if(s[j]<0) { p=j; break; } } for(int j=p;j>i;j--) { swap(s[j],s[j-1]); ans++; } col=-s[i]; } else { int p; for(int j=i;j<s.size();j++) { if(s[j]==col) { p=j; break; } } for(int j=p;j>i;j--) { swap(s[j],s[j-1]); ans++; } } } return ans; for(int i=0;i<s.size();i++) { int wh=i%2; if(wh==0) { ans+=pos[le.front()]-i; col=-s[le.front()]; for(int j=le.front()-1;pos[j]>=i;j--)pos[j]++; le.pop_front(); } else { ans+=pos[re[col].front()]-i; for(int j=re[col].front()-1;pos[j]>=i;j--)pos[j]++; re[col].pop_front(); } } 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...