Submission #1297990

#TimeUsernameProblemLanguageResultExecution timeMemory
1297990Faisal_SaqibAncient Books (IOI17_books)C++17
50 / 100
190 ms36316 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define vll vector<ll> #define all(x) begin(x),end(x) #define pb push_back const int N=1e6+10; bool vis[N]; int num[N],L[N],R[N],d[N]; void add(int l,int r) { d[l]++; d[r+1]--; } long long minimum_walk(std::vector<int> p, int s) { int cyc=0; int n=p.size(); for(int i=0;i<=n;i++)vis[i]=0,L[i]=R[i]=-2e9,d[i]=0; ll ans=0; for(int i=0;i<n;i++)ans+=abs(p[i]-i); for(int i=0;i<n;i++) { if(i!=p[i]) add(min(i,p[i])+1,max(i,p[i])); if(vis[i] or p[i]==i)continue; int j=i; L[cyc]=R[cyc]=i; while(!vis[j]) { num[j]=cyc; vis[j]=1; j=p[j]; R[cyc]=max(R[cyc],j); } cyc++; } set<int> tp; int r=n-1; while(r>=0 and p[r]==r){r--;} for(int i=0;i<r;i++) { d[i+1]+=d[i]; if(i!=p[i]) tp.insert(num[i]); if(tp.size()!=cyc and d[i+1]==0) { ans+=2; } } return ans; } // int main() // { // int n,s; // cin>>n>>s; // vector<int> p(n); // for(int i=0;i<n;i++)cin>>p[i]; // cout<<minimum_walk(p,s)<<endl; // }
#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...