Cod sursa(job #2948968)

Utilizator cincadavidCinca David Andrei cincadavid Data 28 noiembrie 2022 21:47:38
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream cin("datorii.in");
ofstream cout("datorii.out");

int tree[50001];

void Update(int from,int to,int node,int pos,int val)
{
    if(from==to)
    {
        tree[node]+=val;
        return;
    }
    int mid=(from+to)/2;
    if(mid>=pos)
    {
        Update(from,mid,node*2,pos,val);
    }
    else
    {
        Update(mid+1,to,node*2+1,pos,val);
    }
    tree[node]=tree[node*2]+tree[node*2+1];
}

int Query(int from,int to,int node,int a,int b)
{
    if(from==to)
    {
        return tree[node];
    }
    if(from>=a && to<=b)
    {
        return tree[node];
    }
    int mid=(from+to)/2,res=0;
    if(mid>=a)
        res+=Query(from,mid,node*2,a,b);
    if(mid+1<=b)
        res+=Query(mid+1,to,node*2+1,a,b);
    return res;
}

int main()
{
    int n,k,q,a,b;
    cin>>n>>k;
    vector<int>v(n+1);
    for(int i=1;i<=n;i++)
    {
        cin>>v[i];
        Update(1,n,1,i,v[i]);
    }
    for(int i=0;i<k;i++)
    {
        cin>>q>>a>>b;
        if(q==0)
        {
            Update(1,n,1,a,-b);
        }
        else
        {
            cout<<Query(1,n,1,a,b)<<"\n";
        }
    }
    return 0;
}