Submission #507644

#TimeUsernameProblemLanguageResultExecution timeMemory
507644HanksburgerAncient Books (IOI17_books)C++17
50 / 100
116 ms30564 KiB
#include <bits/stdc++.h> using namespace std; long long pos[1000005], num[1000005]; long long minimum_walk(vector<int> p, int s) { long long n=p.size(), l=-1, r=-1, ans=0; for (long long i=0; i<n; i++) pos[p[i]]=i; for (long long i=0; i<n; i++) { if (i<=pos[i]) { ans+=pos[i]-i; num[i]++; num[pos[i]]--; } else { ans+=i-pos[i]; num[pos[i]]++; num[i]--; } } for (long long i=1; i<=n-2; i++) num[i]+=num[i-1]; for (long long i=0; i<=n-2; i++) { if (num[i]) { l=i; break; } } for (long long i=n-2; i>=0; i--) { if (num[i]) { r=i; break; } } if (l!=-1) { for (long long i=l; i<=r; i++) if (!num[i]) ans+=2; if (s<l) ans+=(l-s)*2; if (s>=r+2) ans+=(s-r-1)*2; } 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...