0pts求调¦•ˇ₃ˇ•。)
查看原帖
0pts求调¦•ˇ₃ˇ•。)
433415
LLR_24093789楼主2024/8/21 11:30

初学线段树,样例过了,但是WA 0pts

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+4;
ll e[N<<3];
inline ll read(){
	register ll x=0,t=1;register char s=getchar();
	while(s<'0'||s>'9'){if(s=='-') t=-1;s=getchar();}
	while(s>='0'&&s<='9'){x=(x<<3)+(x<<1)+(s^48);s=getchar();}
	return x*t;
}
int n,w;
char c;
void add(int nl,int nr,int p,int x,ll y){
	if(nl>x||nr<x) return ;
	if(nl==x&&nr==x)
	{
		e[p]+=y;
		return ;
	}
	int mid=(nl+nr)>>1;
	if(x<=mid)add(nl,mid,p<<1,x,y);
	else add(mid+1,nr,p<<1|1,x,y);
	e[p]=e[p<<1]+e[p<<1|1];
}
ll query(int l,int r,int nl,int nr,int p){
	if(nl>r||nr<l) return 0;
	if(nl>=l&&nr<=r) return e[p];
	int mid=(nl+nr)>>1;
	return query(l,r,l,mid,p<<1)+query(l,r,mid+1,r,p<<1|1);
}
signed main()
{
//	freopen("P2068_1.in","r",stdin);
//	freopen("texy.out","w",stdout);
	int x,y;
	n=read(),w=read();
	while(w--)
	{
		c=getchar(),x=read(),y=read();
		if(c=='x') add(1,n,1,x,y);
		else if(c=='y') printf("%lld\n",query(x,y,1,n,1));
	}
//	fclose(stdin);
//	fclose(stdout);
	return 0;
}
2024/8/21 11:30
加载中...