Submission #1171605

#TimeUsernameProblemLanguageResultExecution timeMemory
1171605PieArmyLightning Conductor (POI11_pio)C++20
100 / 100
64 ms21064 KiB
#include<bits/stdc++.h> typedef long long ll; using namespace std; #define int ll int n; int arr[500023],pref[500023],ans[500023],spec[500023]; ll kes(int a,int b){ ll x=arr[a]-arr[b]; ll y=(a-b-(x*x)-1ll)/ll(2*x); return a+max(0ll,min(ll(n-a),y<0?-1ll:(y*y))); } void f(){ for(int i=1;i<=n;i++){ pref[i]=pref[i-1]; spec[i]=0; if(arr[i]>arr[pref[i]])pref[i]=i; } int pos=pref[n-1]; while(pos){ spec[pos]=1; pos=pref[pos-1]; } deque<int>q; for(int i=1;i<=n;i++){ while(q.size()>1){ if(kes(q[1],q[0])<i)q.pop_front(); else break; } if(q.size())ans[i]=max(ans[i],arr[q[0]]+int(sqrt(i-q[0]-1))+1-arr[i]); if(spec[i]){ while(q.size()>1){ int a=q.back();q.pop_back(); if(kes(a,q.back())>=kes(i,q.back()))continue; q.push_back(a); break; } q.push_back(i); } } } int32_t main(){ ios_base::sync_with_stdio(false);cin.tie(NULL); cin>>n; arr[0]=-1; for(int i=1;i<=n;i++){ cin>>arr[i]; } if(n==1){ cout<<0; return 0; } f(); reverse(arr+1,arr+n+1); reverse(ans+1,ans+n+1); f(); for(int i=n;i>=1;i--){ cout<<ans[i]<<"\n"; } }
#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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...