Submission #941695

#TimeUsernameProblemLanguageResultExecution timeMemory
941695emptypringlescanTriple Jump (JOI19_jumps)C++17
32 / 100
4022 ms8924 KiB
#include <bits/stdc++.h>
using namespace std;
int32_t main(){
    ios::sync_with_stdio(0);cin.tie(0);
    int n;
    cin >> n;
    long long arr[n];
    for(int i=0; i<n; i++) cin >> arr[i];
    int q;
    cin >> q;
	int mono[n],cnt=0;
	long long suf[n];
    while(q--){
		int l,r;
		cin >> l >> r;
		l--; r--;
		cnt=0;
		suf[r]=arr[r];
		for(int i=r-1; i>=l; i--) suf[i]=max(suf[i+1],arr[i]);
		long long ans=0;
		for(int i=l; i<=r; i++){
			while(cnt!=0&&arr[mono[cnt-1]]<=arr[i]){
				int a=mono[cnt-1];
				if(i*2-a<=r) ans=max(ans,arr[a]+arr[i]+suf[i*2-a]);
				cnt--;
			}
			if(cnt!=0){
				int a=mono[cnt-1];
				if(i*2-a<=r) ans=max(ans,arr[a]+arr[i]+suf[i*2-a]);
			}
			mono[cnt]=i;
			cnt++;
		}
		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...