Submission #423079

#TimeUsernameProblemLanguageResultExecution timeMemory
423079PbezzAncient Books (IOI17_books)C++14
50 / 100
192 ms31968 KiB
#include "books.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back typedef pair<ll,ll> pii; const ll MAXN=2e5+5; const ll INF=1e9+7; long long minimum_walk(std::vector<int> p, int s) { ll i,n=(ll)p.size(),k,count=0,arr[n+10],maxi,ans=0; pii cycle[n+4]; //cycle[i]={representante left,representante right} for(i=0;i<n+2;i++){ arr[i]=0; cycle[i]={0,0}; } for(i=0;i<n;i++){ if(arr[i]!=0||p[i]==i)continue; maxi = max(i,(ll)p[i]); count++; arr[i]=count; k=p[i]; cycle[count].first=i; ans+=abs(k-i); while(k!=i){ arr[k]=count; ans+=abs(k-p[k]); k=p[k]; maxi = max(maxi,k); } cycle[count].second=maxi; } //cout<<ans<<endl; maxi=0; ll cur=0; for(i=1;i<=count;i++){ while(i<=count && cycle[i].first<=cur){ cur=max(cur,cycle[i].second); i++; } if(i==count+1)break; ans+=2*(cycle[i].first-cur); //cout<<i<<" "<<cycle[i].first-cur<<endl; cur=cycle[i].second; //cout<<cycle[i].first<<" "<<cycle[i].second<<endl; } //for(i=1;i<=count;i++){ //cout<<cycle[i].first<<" "<<cycle[i].second<<endl; //} 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...