给了点很奇怪的报错信息,表示不是很能看懂。
本地编译没有任何问题的说。
本地的环境:
$ clang -v
Apple clang version 12.0.5 (clang-1205.0.22.9)
Target: x86_64-apple-darwin20.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
是站外题,在洛谷 IDE 上的报错信息是:

下面是源代码:
#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
using namespace std;
typedef long long ll;
#define blk(x) (((x) - 1) / blk)
#define hob(x) ((x)*blk+1)
#define eob(x) min(((x)+1)*blk, n)
const int maxn = 5e5;
namespace seqq {
const int blk = 707, nb = maxn / blk + 1;
struct seqA {
int a[maxn + 10], n;
ll preS[maxn + 10], tag[nb + 10];
void init(int _n) {
n = _n;
rep(i,1,n) preS[i] = a[i] + preS[i - 1];
}
void inc(int x, int c) {
int bx = blk(x);
per(i,blk(n),bx+1) tag[i] += c;
per(i,eob(bx),x) preS[i] += c;
// cout << n << ' ' << min(n, (blk + 1) * x) << endl;
// cout << x << ' ' << eob(bx) << endl;
a[x] += c;
}
int qry(int x) {
return preS[x] + tag[blk(x)];
}
} seq;
};
const int blk = 707, nb = maxn / blk + 1;
struct block {
int a[maxn + 10], bcnt[nb + 10][maxn + 10], tag[maxn + 10], n;
ll sum[nb + 10];
void init(int _n) {
n = _n;
// cout << "###############" << endl;
// rep(i,1,n) cout << a[i] << ' '; cout << endl;
rep(i,blk(1),blk(n)) {
int s = hob(i), t = eob(i); sum[i] = 0;
rep(j,s,t) ++ bcnt[i][a[j]], sum[i] += seqq::seq.preS[a[j]];
per(j,n - 1,1) bcnt[i][j] += bcnt[i][j + 1];
// cout << sum[i] << ' ';
}
// cout << endl;
// rep(i,blk(1),blk(n)) {
// rep(j,1,n) cout << bcnt[i][j] << ' '; cout << endl;
// }
// cout << "###############" << endl;
}
void modify(int x, int ac) {
rep(i,blk(1),blk(n)) sum[i] += 1ll * bcnt[i][x] * ac;
}
ll qry(int l, int r) {
return r == 1 ? _qry(r) : _qry(r) - _qry(l - 1);
}
ll _qry(int x) {
ll ret = 0;
int bx = blk(x);
rep(i,0,bx - 1) ret += sum[i];
// cout << hob(bx) << ' ' << x << endl;
rep(i,hob(bx),x) ret += seqq::seq.qry(a[i]); // , cout << a[x] << ' ' << ret << endl;
return ret;
}
} blker[2];
int main() {
if(fopen("yl.in", "r")) {
freopen("yl.in", "r", stdin);
freopen("yl.out", "w", stdout);
}
int n, q, opt, l, r;
scanf("%d", &n);
rep(i,1,n) scanf("%d", seqq::seq.a + i);
seqq::seq.init(n);
rep(i,1,n) {
scanf("%d %d", &l, &r);
blker[0].a[i] = r;
blker[1].a[i] = l - 1;
}
blker[0].init(n);
blker[1].init(n);
scanf("%d", &q);
// rep(i,1,n) cout << seqq::seq.qry(i) << ' '; cout << endl;
rep(i,1,q) {
scanf("%d %d %d", &opt, &l, &r);
if(opt == 1) {
int dis = r - seqq::seq.a[l];
// cout << l << ' ' << dis << endl;
seqq::seq.inc(l, dis);
// rep(i,1,n) cout << seqq::seq.qry(i) << ' '; cout << endl;
blker[0].modify(l, dis);
blker[1].modify(l, dis);
} else if(opt == 2) {
// cout << blker[0].qry(l, r) << endl;
printf("%lld\n", blker[0].qry(l, r) - blker[1].qry(l, r));
}
}
return 0;
}