C++14 vs C++20
查看原帖
C++14 vs C++20
248302
d0j1a_1701楼主2022/1/29 13:26

同一份代码,C++20 O2 会T,但C++14 O2 能过?

C++20 O2

C++14 O2

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int len, root, n, q, sum[15001000], tag[15001000], lc[15001000], rc[15001000];
inline void pushup(int id) {
	sum[id] = sum[lc[id]] + sum[rc[id]];
}
inline void pushdown(int id, int l, int r) {
	if(tag[id] != -1) {
		int mid = l + r >> 1;
		if(!lc[id]) lc[id] = ++len;
		if(!rc[id]) rc[id] = ++len;
		sum[lc[id]] = (mid - l + 1) * tag[id], tag[lc[id]] = tag[id];
		sum[rc[id]] = (r - mid) * tag[id], tag[rc[id]] = tag[id];
		tag[id] = -1;
	}
}
inline void adjust(int &id, int l, int r, int x, int y, int typ) {
	if(!id) id = ++len;
	if(y < l || x > r)    return;
	if(x <= l && r <= y) {
		sum[id] = (r - l + 1) * typ;
		tag[id] = typ;
		return;
	}
	pushdown(id, l, r);
	int mid = l + r >> 1;
	if(x <= mid)   adjust(lc[id], l, mid, x, y, typ);
	if(mid < y)   adjust(rc[id], mid + 1, r, x, y, typ);
	pushup(id);
}
int l, r, k;
int main() {
	memset(tag, -1, sizeof(tag));
	scanf("%d %d", &n, &q);
	adjust(root, 1, n, 1, n, 1);
	while(q--) {
		scanf("%d %d %d", &l, &r, &k);
		adjust(root, 1, n, l, r, k - 1);
		printf("%d\n", sum[1]);
	}
	//system("pause");
	return 0;
}
2022/1/29 13:26
加载中...