Cod sursa(job #3367126)

Utilizator VladStroicaStroica Vlad Cristian VladStroica Data 6 octombrie 2026 11:07:25
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;
int put=1;
int n,m;
int aint[100005];
void upd(int pz)
{
    while(pz>1)
    {
        if(pz%2==1)
            pz--;
        aint[pz/2]=aint[pz]+aint[pz+1];
        pz=pz/2;
    }
}
int afs(int st,int dr)
{
    int sum=0;
    while(st<=dr)
    {
        if(st%2==1)
        {
            sum+=aint[st++];
        }
        st=st/2;
        if(dr%2==0)
        {
            sum+=aint[dr--];
        }
        dr=dr/2;
    }
    return sum;
}
int main()
{
    ifstream cin("datorii.in");
    ofstream cout("datorii.out");
    cin>>n>>m;
    while(put<n)
        put*=2;
    for(int i=0;i<n;i++)
    {
        cin>>aint[i+put];
    }
    for(int i=put-1;i>0;i--)
    {
        aint[i]=aint[2*i]+aint[2*i+1];
    }
    for(int i=1;i<=m;i++)
    {
        int cer,a,b;
        cin>>cer>>a>>b;
        a+=put-1;
        if(cer==0)
        {
            aint[a]-=b;
            upd(a);
        }
        else
        {
            b+=put-1;
            cout<<afs(a,b)<<'\n';
        }

    }
    return 0;
}