0pts WA+TLE 求助
查看原帖
0pts WA+TLE 求助
424089
LuoTianyi_Official楼主2023/10/25 23:57

rt

代码自己写的

#include <iostream>
#include <algorithm>
using namespace std;

struct TLEWA {
    int l, r, id;
} a[1000005]; int t[4000005], qwq[1000005], awa[1000005]; long long ans[1000005];

long long pref[1000005];

void _addd(int x, long long v) {
    for (int j=x; j<=1000000; j+=j&-j) pref[j] += v;
}

long long _query(int x) {
    long long summ=0; for (int j=x; j; j-=j&-j) summ += pref[j]; return summ;
}

void addd(int l, int r, int n, int x, int y, int v) {
    if (t[n]) t[n<<1] = t[n<<1|1] = t[n], t[n] = 0;
    if (l == x && y == r) {t[n] = v; return;}
    int mid = (l + r) / 2;
    if (y <= mid) {addd(l, mid, n<<1, x, y, v); return;}
    if (x > mid) {addd(mid+1, r, n<<1|1, x, y, v); return;}
    addd(l, mid, n<<1, x, mid, v); addd(mid+1, r, n<<1|1, mid+1, y, v);
}

int query(int l, int r, int n, int x) {
    if (t[n] || l == r) return t[n];
    return (x <= (l+r)/2 ? query(l, (l+r)/2, n<<1, x) : query((l+r)/2+1, r, n<<1|1, x));
}

int main() {
    int n, m, q, op, x, y, v, r=1; cin >> n >> m >> q;
    for (int i=1; i<=m; i++) {
        cin >> op;
        if (op == 1) {cin >> x >> y;
            int TLE = query(1, n, 1, x), WA = query(1, n, 1, y);
            addd(1, n, 1, x, x, WA); addd(1, n, 1, y, y, TLE);}
        if (op == 2) {cin >> x >> y >> v; qwq[i] = v;
            addd(1, n, 1, x, y, i);}
        if (op == 3) {cin >> x;
            awa[i] = qwq[query(1, n, 1, x)];}
    }

    for (int i=1; i<=q; i++) cin >> a[i].l >> a[i].r, a[i].id = i;
    sort(a+1, a+1+q, [](TLEWA x, TLEWA y){return x.r < y.r;});

    for (int i=1; i<=q; i++) {
        while (r <= a[i].r) {
            _addd(r, awa[r]);
            r++;}
        ans[a[i].id] = _query(a[i].r) - _query(a[i].l - 1);
    }

    for (int i=1; i<=q; i++) cout << ans[i] << endl;
}
2023/10/25 23:57
加载中...