Submission #1075999

#TimeUsernameProblemLanguageResultExecution timeMemory
1075999edogawa_somethingAncient Books (IOI17_books)C++17
0 / 100
1 ms2396 KiB
#include "books.h" #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<ll> vii; typedef pair<ll,ll> pii; #define F first #define S second #define all(v) v.begin(),v.end() #define pb push_back ll n,pre[2000000],suf[2000000]; bool vis[2000000]; long long minimum_walk(vector<int> p, int s) { n=p.size(); ll res=0; bool chk=1; for(int i=0;i<n;i++) { if(p[i]!=i) chk=0; } if(chk) return 0; pre[0]=(p[0]>0); res+=pre[0]; for(int i=1;i<n;i++) { if(p[i]>=i) pre[i]+=2; vis[p[i]]=1; if(vis[i]) pre[i]-=2; pre[i]+=pre[i-1]; res+=pre[i]; } memset(vis,0,sizeof vis); suf[n-1]=(p[n-1]<n-1); for(int i=n-2;i>=0;i--) { if(p[i]<=i) suf[i]+=2; vis[p[i]]=1; if(vis[i]) suf[i]-=2; suf[i]+=suf[i+1]; } ll l=0,r=n-1; for(int i=n-1;i>=0;i--) { if(suf[i]>0) { r=i; break; } } for(int i=0;i<n;i++) { if(pre[i]>0) { l=i; break; } } for(int i=l;i<r;i++) { if(pre[i]==0) res+=2; } if(s<l) res+=2*(l-s); if(s>r) res+=2*(s-r); return res; }
#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...