BIT 5pts 求教
查看原帖
BIT 5pts 求教
575714
__xsy2013__楼主2024/4/28 18:13
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const int MAXN = 1e5 + 10;

ll bit[MAXN], dp[MAXN];

void update(int idx, ll val) {
    for (; idx < MAXN; idx += idx & -idx) {
        bit[idx] = max(bit[idx], val);
    }
}

ll query(int idx) {
    ll res = 0;
    for (; idx > 0; idx -= idx & -idx) {
        res = max(res, bit[idx]);
    }
    return res;
}

int main() {
    int T;
    scanf("%d", &T);
    while (T--) {
        int n;
        scanf("%d", &n);
        fill(bit, bit + MAXN, 0);
        fill(dp, dp + MAXN, 0);
        ll a[MAXN];
        for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);
        for (int i = n; i; i--) {
            dp[i] = a[i];
            int l = i + 1;
            int r = min(i + a[i], (ll)n);
            dp[i] = max(dp[i], query(r));
            update(i, dp[i]);
            update(l, a[i]);
        }
        printf("%lld\n", dp[1]);
    }
    return 0;
}

2024/4/28 18:13
加载中...