求助codeforces edu 的题目
  • 板块学术版
  • 楼主midsummer_zyl
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/2/25 14:18
  • 上次更新2024/2/25 16:47:41
查看原帖
求助codeforces edu 的题目
1025321
midsummer_zyl楼主2024/2/25 14:18

Link

#include <bits/stdc++.h>
#define LL long long
#define lc(i) ((i) << 1)
#define rc(i) (((i) << 1) | 1)
using namespace std;
const int N = 1e5 + 10;
struct node {
	LL sum = 0;
	LL tag = -1;
} tree[N << 2];
inline void pushdown(LL i, LL tl, LL tmid, LL tr) {
	if(tree[i].tag != -1 && tl != tr) {
		tree[lc(i)].sum = tree[i].tag * (tmid - tl + 1);
		tree[lc(i)].tag = tree[i].tag;
		tree[rc(i)].sum = tree[i].tag * (tr - tmid);
		tree[rc(i)].tag = tree[i].tag;
		tree[i].tag = -1;
		tree[i].sum = tree[lc(i)].sum + tree[rc(i)].sum;
	}
}
inline void build(LL i, LL tl, LL tr) {
	tree[i].sum = 0;
	tree[i].tag = -1;
	if(tl == tr) return ;
	LL tmid = (tl + tr) >> 1;
	build(lc(i), tl, tmid);
	build(rc(i), tmid + 1, tr);
}
inline void update(LL i, LL tl, LL tr, LL l, LL r, LL v) {
	if(tl > r || tr < l) return ;
	if(tl >= l && tr <= r) {
		tree[i].tag = v;
		tree[i].sum = v * (tr - tl + 1);
		return ;
	}
	LL tmid = (tl + tr) >> 1;
	pushdown(i, tl, tmid, tr);
	update(lc(i), tl, tmid, l, r, v);
	update(rc(i), tmid + 1, tr, l, r, v);
	tree[i].sum = tree[lc(i)].sum + tree[rc(i)].sum;
}
inline query(LL i, LL tl, LL tr, LL l, LL r) {
	if(tl > r || tr < l) return 0;
	if(tl >= l && tr <= r) return tree[i].sum;
	LL tmid = (tl + tr) >> 1;
	pushdown(i, tl, tmid, tr);
	LL lv = query(lc(i), tl, tmid, l, r);
	LL rv = query(rc(i), tmid + 1, tr, l, r);
	return lv + rv;
}
int main() {
	LL n, m; scanf("%lld%lld", &n, &m);
	build(1, 1, n);
	while(m--) {
		LL op, l, r; LL v;
		scanf("%lld%lld%lld", &op, &l, &r);
		if(op == 1) {
			scanf("%lld", &v);
			update(1, 1, n, l + 1, r, v);
		} else if(op == 2) {
			LL ans = query(1, 1, n, l + 1, r);
			printf("%lld\n", ans);
		}
	}
	return 0;
}

玄关。蒟蒻不解,一直 wa 在 #27,求助。

2024/2/25 14:18
加载中...