样例过了,交上去就是CE。不知为什么,求大佬看一下!
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
struct jiedian
{
long long l,r,z;
}a[2000005];
long long c[500005];
void bulid(long long k,long long L,long long R)
{
a[k].l=L,a[k].r=R;
if(L==R)
{
a[k].z=c[L];
}
else
{
long long mid=(L+R)/2;
bulid(k*2,L,mid);
bulid(k*2+1,mid+1,R);
a[k].z=a[k*2+1].z+a[k*2].z;
}
}
void add(long long x,long long k,long long b)
{
if(a[b].l==a[b].r)
{
a[b].z+=k;
}
else
{
if(a[b*2+1].l<=x) add(x,k,b*2+1);
if(a[b*2].r>=x) add(x,k,b*2);
a[b].z+=k;
}
}
long long search(long long L,long long R,long long b)
{
long long sum=0;
if(a[b].l>=L&&a[b].r<=R) return a[b].z;
if(a[b*2].r>=L) sum+=search(L,R,b*2);
if(a[b*2+1].l<=R) sum+=search(L,R,b*2+1);
return sum;
}
int main()
{
long long i,n,m,op,x,y,k;
cin>>n>>m;
for(i=1;i<=n;i++) cin>>c[i];
bulid(1,1,n);
for(i=1;i<=m;i++)
{
cin>>op;
if(op==1)
{
cin>>x>>k;
add(x,k,1);
}
if(op==2)
{
cin>>x>>y;
cout<<search(x,y,1)<<endl;
}
}
return 0;
}