#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define X first
#define Y second
const int N=5e5+5;
struct queries
{
int L,R,ID;
} Q[N];
bool cmp(queries a,queries b)
{
return a.L<b.L;
}
int n,request,a[N],l,x,y,z; ll ans[N],f[N]; deque <int> dq;
vector <pii> ve;
int main()
{
ios_base::sync_with_stdio(NULL);
cin.tie(NULL); cout.tie(NULL);
cin >> n;
for (int i=1;i<=n;i++)
cin >> a[i];
cin >> request;
for (int i=1;i<=request;i++)
{
cin >> Q[i].L >> Q[i].R;
Q[i].ID=i;
}
sort(Q+1,Q+request+1,cmp);
for (int i=n;i>=1;i--)
{
while (!dq.empty() and a[i]>=a[dq.back()])
{
ve.push_back(make_pair(i,dq.back()));
dq.pop_back();
}
if (!dq.empty()) ve.push_back(make_pair(i,dq.back()));
dq.push_back(i);
}
sort(ve.begin(),ve.end());
l=ve.size();
l--;
for (int i=request;i>=1;i--)
{
while (l>=0 and ve[l].X>=Q[i].L)
{
x=ve[l].X;
y=ve[l].Y;
z=a[x]+a[y];
for (int j=2*y-x;j<=n;j++)
{
if (f[j]>=z) break;
f[j]=z;
}
l--;
}
for (int j=Q[i].L+2;j<=Q[i].R;j++)
ans[Q[i].ID]=max(ans[Q[i].ID],f[j]+a[j]);
}
for (int i=1;i<=request;i++)
cout << ans[i] << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |