제출 #1153454

#제출 시각아이디문제언어결과실행 시간메모리
1153454brover293단 점프 (JOI19_jumps)C++20
46 / 100
4085 ms94388 KiB
#include <bits/stdc++.h> //qwerty47924692 using namespace std; using ll = long long; const ll N=5e5+29; const string br="617283"; #define sz(a)(ll)a.size() #define f first #define s second ll n,q,w[N],st[N][20],lg[N],l[N],r[N]; void build(){ lg[1]=0; for(ll i=2;i<=n;i++)lg[i]=lg[i/2]+1; for(ll j=1;j<20;j++){ ll k=(1ll<<j); for(ll i=k-1;i<=n;i++){ st[i][j]=max(st[i][j-1],st[i-k/2][j-1]); } } } ll get(ll l,ll r){ if(l>r)return -1e18; ll k=lg[r-l+1]; return max(st[r][k],st[l+(1ll<<k)-1][k]); }ll s[N],sz=0; ll check(ll a,ll b,ll r){ ll x=b-a; return w[a]+w[b]+get(b+x,r); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin>>n; for(ll i=1;i<=n;i++){ cin>>w[i]; st[i][0]=w[i]; }ll q; cin>>q; build(); for(ll i=1;i<=n;i++){ while(sz&&w[s[sz]]<=w[i]){ sz--; } l[i]=s[sz]; s[++sz]=i; } sz=0; s[sz]=n+1; for(ll i=n;i>=1;i--){ while(sz&&w[s[sz]]<w[i]){ sz--; } r[i]=s[sz]; s[++sz]=i; } while(q--){ ll L,R,ans=0; cin>>L>>R; for(ll i=L;i<=R-1;i++){ ans=max(ans,check(i,r[i],R)); if(L<=l[i])ans=max(ans,check(l[i],i,R)); } cout<<ans<<'\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...