一个莫名其妙的指针?
查看原帖
一个莫名其妙的指针?
776337
sugawara楼主2023/11/18 12:51

输入样例的时候是build有问题,在进入build的时候第二次就爆炸了,i莫名其妙很大一个

code:

#include<iostream>
using namespace std;
const int N=1e6+10;
int n,m,q,r,l;
struct node{
	int l,r;
	int val=0;
	int lazy=0;
}tree[N<<2];
int read(){
	int x=0,f=1;
	char c=getchar();
	while(c<'0' || c>'9'){if(c=='-') f=-1;c=getchar();}
	while(c>='0' && c<='9') x=x*10+c-'0',c=getchar();
	return x*f;
}
void build(int i,int l,int r){
	tree[i].l=l,tree[i].r=r;
	if(l==r) tree[i].val=0;
	int mid=l+r>>1;
	build(i<<1,l,mid);
	build(i<<1|1,mid+1,r);
}
void push_down(int i){
	if(!tree[i].lazy) return ;
	tree[i<<1].lazy+=tree[i].lazy;
	tree[i<<1].val+=tree[i].lazy*(tree[i<<1].r-tree[i<<1].l+1); 
	tree[i<<1|1].lazy+=tree[i].lazy;
	tree[i<<1|1].val+=tree[i].lazy*(tree[i<<1|1].r-tree[i<<1|1].l+1); 
	tree[i].lazy=0;
}
void update(int i,int l,int r){
	if(tree[i].l>r || tree[i].r<l) return;
	if(tree[i].l<=l && tree[i].r>=r){
		tree[i].val+=(l-r+1);
		tree[i].lazy++;
	}
	update(i<<1,l,r);
	update(i<<1|1,l,r);
}
int query(int i,int l,int r){
	if(tree[i].l>r || tree[i].r<l) return 0;
	if(tree[i].l<=l && tree[i].r>=r) return tree[i].val;
	query(i<<1,l,r);
	query(i<<1|1,l,r);
	return tree[i].val;
}
int main(){
	n=read(),m=read();
	build(1,1,n);
	for(int i=0;i<=m;i++){
		q=read(),l=read(),r=read();
		if(q==1) update(1,l,r);
		if(q==2) printf("%d",query(1,l,r));
	}
	return 0;
}
2023/11/18 12:51
加载中...