关于 UB
  • 板块学术版
  • 楼主shyr
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/12/21 18:06
  • 上次更新2023/10/28 13:57:22
查看原帖
关于 UB
357163
shyr楼主2021/12/21 18:06

本人在调 P2801 分块做法的时候,发现在预处理的时候 add 标记出现了增加的奇怪情况,后来直接初始化才过的,求大佬看一下为什么会出现这种情况。

附主函数代码:其中只有 Add 函数才会增加 add 的值。

signed main(){
//	freopen("in.in", "r", stdin);
//	freopen("out.txt", "w", stdout);
	scanf("%lld%lld", &n, &q);
	for(int i = 1; i <= n; ++i) scanf("%lld", &a[i]);
	int len = sqrt(n) + 1;
	for(int i = 1; i <= len; ++i){
		L[i] = (i - 1) * len + 1; R[i] = len * i;
	}
	if(len * len != n){
		L[len + 1] = len * len + 1, R[len + 1] = n; ++len;
	}
	for(int i = 1; i <= len; ++i){
		for(int j = L[i]; j <= R[i]; ++j){
			P[j] = i; d[i].push_back(a[j]);
		}
		sort(d[i].begin(), d[i].end());
	}
	memset(add, 0, sizeof(add));
	//printf("%lld >>>>>\n", add[1]);
	while(q--){
		scanf("%s%lld%lld%lld", opt + 1, &l, &r, &x);
		if(opt[1] == 'M'){
			//printf("%lld %lld %lld z\n", l, r, x);
			Add(l, r, x);
		}
		else {
			printf("%lld\n", query(l, r, x));
		}
	}
}
2021/12/21 18:06
加载中...