萌新刚学OI,线段树90分求助!
查看原帖
萌新刚学OI,线段树90分求助!
850498
__erinww楼主2023/6/25 11:22

qw,WA#1了。。

代码:

#include <stdio.h>

#define MAXN 16384

struct TREE_NODE{
	int l,r;
	int value;
} tree[MAXN << 2];

int n,m;
int a[MAXN];

inline void BUILD(int p,int l,int r){
	tree[p].l = l;tree[p].r = r;
	if(l == r){
		tree[p].value = 1;
		return ;
	}
	int mid = l+r >> 1;
	BUILD(p << 1,l,mid);
	BUILD(p << 1|1,mid+1,r);
	tree[p].value = tree[p << 1].value+tree[p << 1|1].value;
}

inline void UPDATE(int p,int l,int r){
	int &x = tree[p].l;int &y = tree[p].r;
	if(x == y){
		tree[p].value = 0;
		return ;
	}
	int mid = x+y >> 1;
	if(l <= mid)	UPDATE(p << 1,l,r);
	if(r > 	mid)	UPDATE(p << 1|1,l,r);
	tree[p].value = tree[p << 1].value+tree[p << 1|1].value;
}

inline int SEARCH(int p,int l,int r){
	int &x = tree[p].l;int &y = tree[p].r;
	if(x >= l && y <= r)	return tree[p].value;
	int mid = x+y >> 1;
	int step = 0;
	if(l <= mid)	step += SEARCH(p << 1,l,r);
	if(r >  mid)	step += SEARCH(p << 1|1,l,r);
	return step;
}

signed main(){
	scanf("%d%d",&n,&m);
	BUILD(1,1,n);
	while(m --){
		int l,r;
		scanf("%d%d",&l,&r);
		UPDATE(1,l,r);
	}printf("%d",SEARCH(1,1,n)+1);
	
	return 0;
}

(=・ω・=)

2023/6/25 11:22
加载中...