제출 #1155862

#제출 시각아이디문제언어결과실행 시간메모리
1155862alexdd고대 책들 (IOI17_books)C++20
50 / 100
78 ms19952 KiB
#include "books.h" #include<bits/stdc++.h> using namespace std; const int INF = 1e9; int n; int p[1000005]; int maxpref[1000005],minsuff[1000005]; long long minimum_walk(std::vector<int> cit_p, int s) { s++; n = cit_p.size(); for(int i=1;i<=n;i++) p[i] = cit_p[i-1]+1; int ult=0,primu=n+1; long long rez=0; for(int i=1;i<=n;i++) { maxpref[i] = max(maxpref[i-1], p[i]); if(p[i]!=i) { ult=i; primu = min(primu, i); } rez += abs(p[i]-i); } minsuff[n+1] = n+1; for(int i=n;i>0;i--) minsuff[i] = min(minsuff[i+1], p[i]); if(ult==0) return 0; ult = max(ult, s); primu = min(primu, s); for(int i=primu+1;i<=ult;i++) if(maxpref[i-1]<i && minsuff[i]>=i) rez+=2; /*for(int i=primu+1;i<=s;i++) { bool gasit=0; for(int j=1;j<i;j++) if(i<=p[j] && p[j]<=s) gasit=1; for(int j=i;j<=s;j++) if(p[j]<i) gasit=1; if(!gasit) rez+=2; } for(int i=s+1;i<=ult;i++) { bool gasit=0; for(int j=i;j<=n;j++) if(s<=p[j] && p[j]<i) gasit=1; for(int j=s;j<i;j++) if(p[j]>=i) gasit=1; if(!gasit) rez+=2; }*/ int tole=s,tori=s; while(tole-1>=1 && p[tole]!=tole) tole--; while(tori+1<=n && p[tori]!=tori) tori++; //rez += 2*min(ult-s, s-primu); rez += 2*min(s-tole,tori-s); return rez; }
#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...