#include<bits/stdc++.h>
#define endl '\n'
#define INF 0x3f3f3f3f
using namespace std;
const int N=100010;
long long input[N];
struct TREE
{
long long sum;
int l,r;
}tree[N<<2];
void pushup(int u)
{
tree[u].sum=tree[u<<1].sum+tree[u<<1|1].sum;
}
void build(int i,int l,int r)//建立线段树
{
tree[i].l=l,tree[i].r=r;
if(l==r)
{
tree[i].sum=input[l];
return ;
}
int mid=(l+r)>>1;
build(i<<1,l,mid);
build(i<<1|1,mid+1,r);
pushup(i);
}
long long search(int i,int l,int r)//线段树区间询问
{
if(tree[i].l>=l&&tree[i].r<=r)return tree[i].sum;
long long s=0;
if(tree[i<<1].r>=l)s+=search(i<<1,l,r);
if(tree[i<<1|1].l<=r)s+=search(i<<1|1,l,r);
return s;
}
void add(int i,int dis,long long k)//线段树单点修改
{
if(tree[i].l==tree[i].r)
{
tree[i].sum+=k;
return ;
}
if(dis<=tree[i<<1].r)add(i<<1,dis,k);//只改变一个数所以用if else
else add(i<<1|1,dis,k);
pushup(i);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,m,type;
while(cin>>n)
{
for(int i=1;i<=n;i++)
{
cin>>input[i];
}
build(1,1,n);
cin>>m;
for(int i=0;i<m;i++)
{
cin>>type;
if(type==1)
{
int a;
long long b;
cin>>a>>b;
add(1,a,b);
}
else
{
int a,b;
cin>>a>>b;
cout<<search(1,a,b)<<endl;
}
}
}
return 0;
}
C - 数组计算机
最新推荐文章于 2024-08-16 21:07:50 发布