树状数组求助,样例全部可通过
查看原帖
树状数组求助,样例全部可通过
363415
251Sec楼主2022/8/18 21:12
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
struct Act {
    int op, x, v;
} act[200005];
int n, q;
int a[8005];
// f1 维护小于i的数的数量。
int f1[20005];

// f2 维护下标小于j的数中i的数量。(第一维是i, 第二维是j)
int f2[20005][8005];

int b[200005], bl;
int lowbit(int x) {
    return x & -x;
}
void update1(int l, int x) {
    while (l <= n + 5006) {
        f1[l] += x;
        l += lowbit(l);
    }
}
void update2(int l, int x, int i) {
    while (l <= n + 5006) {
        f2[i][l] += x;
        l += lowbit(l);
    }
}
int get1(int i) {
    int ans = 0;
    while (i) {
        ans += f1[i];
        i -= lowbit(i);
    }
    return ans;
}
int get2(int i, int j) {
    int ans = 0;
    while (j) {
        ans += f2[i][j];
        j -= lowbit(j);
    }
    return ans;
}
int main()
{
    scanf("%d%d", &n, &q);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
        b[++bl] = a[i];
    }
    for (int i = 1; i <= q; i++) {
        scanf("%d%d", &act[i].op, &act[i].x);
        if (act[i].op == 1) {
            scanf("%d", &act[i].v);
            b[++bl] = act[i].v;
        }
    }
    sort(b + 1, b + bl + 1);
    bl = unique(b + 1, b + bl + 1) - b;
    for (int i = 1; i <= n; i++) {
        a[i] = lower_bound(b + 1, b + bl, a[i]) - b;
    }
    for (int i = 1; i <= q; i++) {
        if (act[i].op == 1) {
            act[i].v = lower_bound(b + 1, b + bl, act[i].v) - b;
        }
    }
    for (int i = 1; i <= n; i++) {
        update1(a[i] + 1, 1);
        update2(i + 1, 1, a[i]);
    }
    for (int i = 1; i <= q; i++) {
        if (act[i].op == 1) {
            int x = act[i].x, v = act[i].v;
            update1(a[x] + 1, -1);
            update1(v + 1, 1);
            update2(x + 1, -1, a[x]);
            update2(x + 1, 1, v);
            a[x] = v;
        }
        else {
            int x = act[i].x;
            printf("%d\n", get1(a[x]) + get2(a[x], x) + 1);
        }
    }
    return 0;
}

为什么CSP-J的橙题考这个???

2022/8/18 21:12
加载中...