强烈建议删除线段树标签
  • 板块P4939 Agent2
  • 楼主ZSFZ
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/6/23 21:43
  • 上次更新2024/6/24 11:56:47
查看原帖
强烈建议删除线段树标签
288385
ZSFZ楼主2024/6/23 21:43

线段树4e7直接MLE

开小一点直接RE

#include <bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
bool l_;
struct node{
	int val, tag;
	node(){
		val = 0;
		tag = 0;
	}
};
node tree[10000010];

void pushup(int u){
	tree[u].val = tree[2 * u].val + tree[2 * u + 1].val;
}
void pushdown(int l, int r, int u){
	if (tree[u].tag){
		tree[u * 2].tag += tree[u].tag;
		tree[u * 2 + 1].tag += tree[u].tag;
		int mid = (l + r) / 2;
		tree[u * 2].val += (mid - l + 1) * tree[u].tag;
		tree[u * 2 + 1].val += (r - mid) * tree[u].tag;
		tree[u].tag = 0;
	}
}
void update(int l, int r, int L, int R, int c, int u){
	if (l >= L && r <= R){
		tree[u].tag += c;
		tree[u].val += c * (r - l + 1);
		return ;
	}
	pushdown(l, r, u);
	int mid = (l + r) / 2;
	if (mid >= L) update(l, mid, L, R, c, u * 2);
	if (mid < R) update(mid + 1, r, L, R, c, u * 2 + 1);
	pushup(u);
}
int query(int l, int r, int L, int R, int u){
	if (l >= L && r <= R) return tree[u].val;
	pushdown(l, r, u); 
	int ret = 0;
	int mid = (l + r) / 2;
	if (mid >= L) ret += query(l, mid, L, R, u * 2);
	if (mid < R) ret += query(mid + 1, r, L, R, u * 2 + 1);
	return ret; 
}
bool r_;
int main(){
	//cout << ((&r_) - (&l_)) / 1024.0 / 1024.0 << endl;
	int n, m;
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= m; i++){
		int op;
		scanf("%d", &op);
		if (op == 0){
			int l, r;
			scanf("%d%d", &l, &r);
			update(1, n, l, r, 1, 1);
		}else{
			int a;
			scanf("%d", &a);
			printf("%d\n", query(1, n, a, a, 1));
		}
	}
	return 0;
}

线段树RE70分直接白调一小时

2024/6/23 21:43
加载中...