Submission #1025530

#TimeUsernameProblemLanguageResultExecution timeMemory
1025530huutuanAncient Books (IOI17_books)C++14
50 / 100
91 ms21620 KiB
#include "books.h" #include <bits/stdc++.h> using namespace std; const int N=1e6; int vis[N], n; long long minimum_walk(vector<int> p, int s) { n=p.size(); vector<pair<int, int>> v; long long ans=0; for (int i=0; i<n; ++i) if (!vis[i]){ int mx=i, mn=i; while (!vis[i]){ mx=max(mx, i); mn=min(mn, i); vis[i]=1; ans+=abs(p[i]-i); i=p[i]; } v.emplace_back(mn, mx); } int pf=0, sf=0; for (int i=0; i<n; ++i) if (p[i]==i) ++pf; else break; for (int i=n-1; i>=0; --i) if (p[i]==i) ++sf; else break; sort(v.begin(), v.end()); int cur=0; for (auto &i:v){ if (cur<=i.first) ans+=(i.first-cur)*2; cur=max(cur, i.second); } bool check=0; for (auto &i:v) check|=i.first<=s && s<=i.second; if (pf>=s) ans-=s*2; else ans-=pf*2; if (sf>=n-s-1) ans-=(n-s-1)*2; else ans-=sf*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...