作为一名萌新,所以我们可以用"线段树"来做这道题
啊这......
先上才艺:
#include<bits/stdc++.h>
using namespace std;
const int N=500005;
int a[N];
struct note{
int _sum;
int left,right;
}t[N*4];
int query(int p,int x,int y)//查找树
{
if(x<=t[p].left&&t[p].right<=y)
{
return t[p]._sum;
}
int mid=(t[p].left+t[p].right)/2;
int sum=0;
if(x<=mid)
{
sum+=query(p*2,x,y);
}
if(y>mid)
{
sum+=query(p*2+1,x,y);
}
return sum;
}
void update(int p,int x,int k)//修改点
{
if(t[p].left==x&&t[p].right==x)
{
t[p]._sum+=k;
return ;
}
int mid=(t[p].left+t[p].right)/2;
if(x<=mid)
{
update(p*2,x,k);
}
if(x>mid)
{
update(p*2+1,x,k);
}
t[p]._sum=t[p*2]._sum+t[p*2+1]._sum;
}
void bulie(int l,int r,int p)//建造
{
t[p].left=l,t[p].right=r;
if(l==r)
{
t[p]._sum=a[l];
return ;
}
int mid=(l+r)/2;
bulie(l,mid,p*2);
bulie(mid+1,r,p*2+1);
t[p]._sum=t[p*2]._sum+t[p*2+1]._sum;
}
int main()
{
int n,q;
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
bulie(1,n,1);
int o;
for(int i=1;i<=q;i++)
{
cin>>o;
if(o==1)
{
int x,k;
cin>>x>>k;
update(1,x,k);
}
else
{
int x,y;
cin>>x>>y;
cout<<query(1,x,y)<<endl;
}
}
return 0;
}
这题对于萌新可以用线段树的方式,就是......
++,我不讲了,自己看大佬的博客吧