题解:P11325 【MX-S7-T3】「SMOI-R2」Monotonic Queue
考虑每一个区间设当前区间为
并且发现对于
详情见代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 601000, INF = 2e12;
int dp[N], v[N], sum[N], a[N];
int stc[N], top, n, ans = -INF;
signed main () {
scanf("%lld", &n);
for (int i = 1; i <= n; i++) scanf("%lld", &v[i]), sum[i] = sum[i - 1] + v[i];
for (int i = 1; i <= n; i++) scanf("%lld", &a[i]), dp[i] = - INF;
for (int i = 1; i <= n; i++) {
while (top && a[stc[top]] < a[i])
dp[i] = max(dp[i], dp[stc[top]] + sum[i - 1] - sum[stc[top--] - 1]);
dp[i] = max(dp[i], dp[stc[top]] + sum[i - 1] - sum[stc[top]]);
stc[++top] = i;
ans = max(ans, dp[i]);
}
cout << ans << '\n';
return 0;
}