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;
}