Submission #1297845

#TimeUsernameProblemLanguageResultExecution timeMemory
1297845Faisal_SaqibAncient Books (IOI17_books)C++17
0 / 100
1 ms340 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]=-1,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(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 pads=-1; // cout<<cyc<<endl; for(int i=0;i<n;i++) { if(i>pads) { if(tp.size()==cyc) { break; } else { ans+=2; } } tp.insert(num[i]); pads=max(pads,R[num[i]]); } 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...