Submission #1278431

#TimeUsernameProblemLanguageResultExecution timeMemory
1278431MMihalevAncient Books (IOI17_books)C++20
50 / 100
95 ms23784 KiB
#include<iostream> #include<vector> #include "books.h" using namespace std; const int MAX_N=1e6+6; int col[MAX_N]; int cols; int a[MAX_N]; int l[MAX_N]; int r[MAX_N]; int n; long long ans; long long minimum_walk(std::vector<int> p, int s) { n=p.size(); s++; bool zero=1; for(int i=1;i<=n;i++) { l[i]=1e9; r[i]=-1; a[i]=p[i-1]+1; if(a[i]!=i)zero=0; } if(zero)return 0; int b=1,e=n; while(a[e]==e)e--; while(a[b]==b)b++; ans+=(b-1)*2; for(int i=b;i<=e;i++) { ans+=abs(i-a[i]); if(col[i]==0) { if(i==a[i])continue; cols++; int pos=i; while(col[pos]==0) { l[cols]=min(l[cols],pos); r[cols]=max(r[cols],pos); col[pos]=cols; pos=a[pos]; } } } int active=0; for(int i=b;i<=e;i++) { if(i>b && active==0) { ans+=2; } int curcol=col[i]; if(l[curcol]==i) { active++; } if(r[curcol]==i)active--; } 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...