Submission #142878

#TimeUsernameProblemLanguageResultExecution timeMemory
142878Sarah_MokhtarTriple Jump (JOI19_jumps)C++14
5 / 100
4018 ms5368 KiB
#include<bits/stdc++.h> using namespace std; #define f first #define s second typedef long long ll; const int N=2e5+10,M=(N<<2),OO=0x3f3f3f; ll tree[N],A[N],n,q,l,r; void build(int node,int l,int r){ if(l==r) tree[node]=A[l]; else{ int med=(l+r)/2; build(2*node,l,med); build(2*node+1,med+1,r); tree[node]=max(tree[2*node],tree[2*node+1]); } } int query(int node,int s,int e,int l,int r){ if(s>e||s>r||e<l) return 0; if(s>=l&&e<=r) return tree[node]; int med=(s+e)/2; int q1=query(2*node,s,med,l,r); int q2=query(2*node+1,med+1,e,l,r); return max(q1,q2); } int main(){ cin>>n; for(int i=0;i<n;++i) cin>>A[i]; build(1,0,n-1); cin>>q; //cout<<query(1,0,n-1,1,2)<<"\n"; while(q--){ cin>>l>>r; --l,--r; ll mx=0; for(int i=l;i<=r;++i){ ll sum=0; for(int j=i+1;j<=r;++j){ sum=A[i]+A[j]; int dis=abs(j-i); int int1=j+dis,int2=r; if(int1<l||int1>r) continue; ll ans=query(1,0,n-1,int1,int2); //cout<<ans<<"\n"; sum+=ans; mx=max(mx,sum); } } cout<<mx<<"\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...