Cod sursa(job #3307369)

Utilizator lucian243Condrea Andrei Lucian lucian243 Data 20 august 2025 15:18:00
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
#include <fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int aint[60005],n,a[15005],m,sol,op,x,y;
void build(int node,int st,int dr)
{
    if(st==dr)
    {
        aint[node]=a[st];
    }
    else
    {
        int mij=(st+dr)/2;
        build(2*node,st,mij);
        build(2*node+1,mij+1,dr);
        aint[node]=aint[2*node+1]+aint[2*node];

    }
}
void update(int node,int st,int dr, int pos,int val)
{
    if(st==dr)
    {
        aint[node]-=val;
    }
    else
        {
            int mij=(st+dr)/2;
        if(pos<=mij)
        {
            update(2*node,st,mij,pos,val);
        }
        else {
            update(2*node+1,mij+1,dr,pos,val);
        }
        aint[node]=aint[2*node]+aint[2*node+1];
        }
    
}
void query(int node,int st,int dr,int l,int r)
{
    if(l<=st&&r>=dr)
    sol+=aint[node];
    else
     {
            int mid=(st+dr)/2;
            if(mid>=l)
            query(2*node,st,mid,l,r);
        if(mid+1<=r)
        query(2*node+1,mid+1,dr,l,r);
     }
}
int main() {
	f>>n>>m;
    for(int i=1;i<=n;i++)
    f>>a[i];
build(1,1,n);
while(m--)
{
    f>>op>>x>>y;
    if(op==0)
    {
        update(1,1,n,x,y);
    }
    else {
    sol=0;
    query(1,1,n,x,y);
    g<<sol<<'\n';
    }
}
}