#include <bits/stdc++.h>
#pragma GCC target("sse,sse2")
#pragma GCC optimize("unroll-loops,O3")
#define rep(i,l,r) for (int i = l; i < r; i++)
#define repr(i,r,l) for (int i = r; i >= l; i--)
#define X first
#define Y second
#define all(x) (x).begin() , (x).end()
#define pb push_back
#define endl '\n'
#define debug(x) cerr << #x << " : " << x << endl;
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pll;
constexpr int N = 1e6+20,mod = 1e9+7,inf = 1e9+10;
inline int mkay(int a,int b){
if (a+b >= mod) return a+b-mod;
if (a+b < 0) return a+b+mod;
return a+b;
}
inline int poww(int a,int k){
if (k < 0) return 0;
int z = 1;
while (k){
if (k&1) z = 1ll*z*a%mod;
a = 1ll*a*a%mod;
k /= 2;
}
return z;
}
int n;
int a[N],l[N],r[N],mx[N][20],lg[N];
int rmq(int l,int r){
int j = lg[r-l];
return max(mx[r-1][j],mx[l+(1 << j)-1][j]);
}
int main(){
ios_base :: sync_with_stdio(0); cin.tie(0);
cin >> n;
lg[1] = 0;
rep(i,2,n+1) lg[i] = 1+lg[i/2];
stack<int> st;
rep(i,0,n){
cin >> a[i];
mx[i][0] = a[i];
while (!st.empty() && a[st.top()] < a[i]) st.pop();
if (st.empty()) l[i] = -1;
else l[i] = st.top();
st.push(i);
}
rep(j,1,20){
rep(i,(1 << j)-1,n){
mx[i][j] = max(mx[i][j-1],mx[i-(1 << (j-1))][j-1]);
}
}
while(!st.empty()) st.pop();
repr(i,n-1,0){
while (!st.empty() && a[st.top()] < a[i]) st.pop();
if (st.empty()) r[i] = n;
else r[i] = st.top();
st.push(i);
}
int q;
cin >> q;
while(q--){
int L,R;
cin >> L >> R;
L--;
int ans = 0,m[3] = {-1,-1,-1};
rep(i,L,R){
if (a[i] > m[0]){
m[2] = m[1];
m[1] = m[0];
m[0] = a[i];
}
else if (a[i] > m[1]){
m[2] = m[1];
m[1] = a[i];
}
else if (a[i] > m[2]){
m[2] = a[i];
}
}
rep(i,L,R){
if (l[i] >= L && 2*i-l[i] < R){
if (a[i] >= m[2] || a[l[i]] >= m[2] || rmq(2*i-l[i],R) >= m[2]) ans = max(ans,a[i]+a[l[i]]+rmq(2*i-l[i],R));
}
if (r[i] < R && 2*r[i]-i < R){
if (a[i] >= m[2] || a[r[i]] >= m[2] || rmq(2*r[i]-i,R) >= m[2]) ans = max(ans,a[i]+a[r[i]]+rmq(2*r[i]-i,R));
}
}
cout << ans << endl;
}
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
340 KB |
Output is correct |
2 |
Correct |
1 ms |
340 KB |
Output is correct |
3 |
Correct |
1 ms |
340 KB |
Output is correct |
4 |
Correct |
1 ms |
384 KB |
Output is correct |
5 |
Correct |
1 ms |
340 KB |
Output is correct |
6 |
Incorrect |
1 ms |
340 KB |
Output isn't correct |
7 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
340 KB |
Output is correct |
2 |
Correct |
1 ms |
340 KB |
Output is correct |
3 |
Correct |
1 ms |
340 KB |
Output is correct |
4 |
Correct |
1 ms |
384 KB |
Output is correct |
5 |
Correct |
1 ms |
340 KB |
Output is correct |
6 |
Incorrect |
1 ms |
340 KB |
Output isn't correct |
7 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
60 ms |
19020 KB |
Output is correct |
2 |
Correct |
50 ms |
19840 KB |
Output is correct |
3 |
Correct |
50 ms |
19956 KB |
Output is correct |
4 |
Correct |
61 ms |
19128 KB |
Output is correct |
5 |
Incorrect |
57 ms |
19140 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
340 KB |
Output is correct |
2 |
Correct |
1 ms |
340 KB |
Output is correct |
3 |
Correct |
1 ms |
340 KB |
Output is correct |
4 |
Correct |
1 ms |
384 KB |
Output is correct |
5 |
Correct |
1 ms |
340 KB |
Output is correct |
6 |
Incorrect |
1 ms |
340 KB |
Output isn't correct |
7 |
Halted |
0 ms |
0 KB |
- |