不然乱写就过了
在另一个网站上超时
当然也有可能是我菜
#include<bits/stdc++.h>
using namespace std;
struct SegmentTree
{
int Left,Right;
int data;
}t[1500000];
int a[500000];
void BuildTree(int p,int Left,int Right)
{
t[p].Left=Left;
t[p].Right=Right;
if (Left==Right)
{
t[p].data=a[Left];
}
else
{
int mid=(Left+Right)/2;
BuildTree(p*2,Left,mid);
BuildTree(p*2+1,mid+1,Right);
t[p].data=t[p*2].data+t[p*2+1].data;
}
}
int Ask(int p,int Left,int Right)
{
if (Left<=t[p].Left && Right>=t[p].Right) return t[p].data;
int mid=(t[p].Left+t[p].Right)/2;
int ans=0;
if (Left<=mid) ans=ans+Ask(p*2,Left,Right);
if (Right>mid) ans=ans+Ask(p*2+1,Left,Right);
return ans;
}
void Change_Value(int p,int x,int value)
{
if (t[p].Left==t[p].Right)
{
t[p].data+=value;
}
else
{
int mid=(t[p].Left+t[p].Right)/2;
if (x<=mid) Change_Value(p*2,x,value);
else Change_Value(p*2+1,x,value);
t[p].data=t[p*2].data+t[p*2+1].data;
}
}
int main()
{
int l,n;
cin>>l>>n;
for(int i=1;i<=l;i++)
{
cin>>a[i];
}
BuildTree(1,1,l);
for(int i=0;i<n;i++)
{
int j,k,r;
cin>>j>>k>>r;
if(j==1)
{
Change_Value(1,k,r);
}
else
{
cout<<Ask(1,k,r)<<endl;
}
}
return 0;
}