为什么T了啊
查看原帖
为什么T了啊
38886
越学越掂楼主2024/5/29 20:19
#include <bits/stdc++.h>
#define ll unsigned long long
#define maxn 1000005
using namespace std;

int n, m;
ll l, r;
ll f[maxn], pre[maxn], w[maxn], que[maxn];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t;
    cin >> t;
    while (t--)
    {
        memset(f, 0, sizeof(f));
        memset(pre, 0, sizeof(pre));
        memset(w, 0, sizeof(w));
        memset(que, 0, sizeof(que));
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> w[i];
        w[++n] = 0;
        cin >> m;
        for (int i = 1; i <= m; i++)
        {
            cin >> l >> r;
            pre[r + 1] = max(pre[r + 1], l);
        }
        pre[1] = 0;
        for (int i = 2; i <= n; i++)
            pre[i] = max(pre[i], pre[i - 1]);
        l = 1;
        r = 0;
        que[++r] = 0;
        for (int i = 1; i <= n; i++)
        {
            while (l <= r && que[l] < pre[i])
                l++;
            f[i] = f[que[l]] + w[i];
            while (l <= r && f[que[r]] >= f[i])
                r--;
            que[++r] = i;
        }
        cout << f[n] << "\n";
    }
    return 0;
}
2024/5/29 20:19
加载中...