Submission #986397

#TimeUsernameProblemLanguageResultExecution timeMemory
986397PyqeAncient Books (IOI17_books)C++17
100 / 100
269 ms82364 KiB
#include <bits/stdc++.h> #include "books.h" using namespace std; const long long inf=1e18; long long n,a[1000069],fh[2][1000069],nr[1000069],dsu[1000069]; bitset<1000069> vtd,vtd2; queue<long long> q; long long fd(long long x) { if(dsu[x]!=x) { dsu[x]=fd(dsu[x]); } return dsu[x]; } void ad(long long x,long long w) { long long i,p,sz; vector<long long> v; for(p=fh[0][x];fd(p)<=fh[1][x];dsu[fd(p)]=fd(fd(p)+1)) { q.push(fd(p)); nr[fd(p)]=w; v.push_back(fd(p)); } sz=v.size(); for(i=0;i<sz;i++) { ad(v[i],w); } } long long minimum_walk(vector<int> aa,int st) { long long i,ii,u,k,p,mn,mx,z=0; st++; n=aa.size(); for(i=1;i<=n;i++) { a[i]=aa[i-1]+1; z+=abs(i-a[i]); nr[i]=inf; } for(i=1;i<=n;i++) { if(!vtd[i]) { mn=i; mx=i; for(p=i;!vtd[p];p=a[p]) { vtd[p]=1; mn=min(mn,p); mx=max(mx,p); } for(p=i;!vtd2[p];p=a[p]) { vtd2[p]=1; fh[0][p]=mn; fh[1][p]=mx; } } } for(i=1;i<=n+1;i++) { dsu[i]=i; } ad(st,0); mx=0; for(;!q.empty();) { k=q.front(); q.pop(); if(fh[0][k]<=st&&fh[1][k]>=st) { mx=nr[k]; } for(ii=0;ii<2;ii++) { u=!ii*2-1; if(k+u&&k+u<=n) { ad(k+u,nr[k]+1); } } } z+=mx*2; mn=st; mx=st; for(i=1;i<=n;i++) { if(a[i]!=i) { mn=min(mn,i); mx=max(mx,i); } } k=0; for(i=mn;i<mx;i++) { k=max(k,fh[1][i]); z+=2*(k==i); } return z; }
#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...