Cod sursa(job #2629192)

Utilizator betybety bety bety Data 19 iunie 2020 14:21:31
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
using namespace std;
ifstream cin("datorii.in");
ofstream cout("datorii.out");
const int lim=1e5;
int tree[4*lim+3],v[lim];
void build(int nod,int l,int r)
{
    if(l==r) {tree[nod]=v[l];return;}
    int med=(l+r)/2;
    build(2*nod,l,med);
    build(2*nod+1,med+1,r);
    tree[nod]=tree[2*nod]+tree[2*nod+1];
}
void update(int nod,int l,int r,int poz,int val)
{
    if(l==r) {tree[nod]+=val;return;}
    int med=(l+r)/2;
    if(poz<=med) update(2*nod,l,med,poz,val);
    else update(2*nod+1,med+1,r,poz,val);
    tree[nod]=tree[2*nod]+tree[2*nod+1];
}
int query(int nod,int l,int r,int x,int y)
{
    if(x<=l and r<=y) return tree[nod];
    int med=(l+r)/2;
    int ans1=0,ans2=0;
    if(x<=med)
        ans1=query(2*nod,l,med,x,y);
    if(y>med)
        ans2=query(2*nod+1,med+1,r,x,y);
    return ans1+ans2;
}
int main()
{
    int n,m,tip,x,y;
    cin>>n>>m;
    for(int i=1;i<=n;++i)
        cin>>v[i];
    build(1,1,n);
    while(m--)
    {
        cin>>tip>>x>>y;
        if(!tip) update(1,1,n,x,-y);
        else cout<<query(1,1,n,x,y)<<'\n';
    }
    return 0;
}