Cod sursa(job #3037471)

Utilizator mariaionescu2006Ionescu Maria mariaionescu2006 Data 25 martie 2023 16:05:11
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("datorii.in");
ofstream fout ("datorii.out");
const int nmax=6e4;
int n,m,v[nmax],a,b,t;
void update(int a,int poz,int st,int dr,int nod)
{
    if (st==dr) {v[nod]-=a;
                 return;}
    int mij=(st+dr)/2;
    if (poz<=mij) update(a,poz,st,mij,2*nod);
    else if (poz>mij) update(a,poz,mij+1,dr,2*nod+1);
    v[nod]=v[2*nod]+v[2*nod+1];
}
int query(int l,int r,int st,int dr,int nod)
{
    int mij=(st+dr)/2;
    if (l<=st && dr<=r) return v[nod];
    if (r<=mij) return query(l,r,st,mij,2*nod);
    else if (l>mij) return query(l,r,mij+1,dr,2*nod+1);
    return query(l,r,st,mij,2*nod)+query(l,r,mij+1,dr,2*nod+1);
}
int main()
{
    fin >>n>>m;
    for (int i=1;i<=n;i++)
        {fin >>a;
         update(a*(-1),i,1,n,1);}
    for (int i=1;i<=m;i++)
        {fin>>t>>a>>b;
         if (t==0) update(b,a,1,n,1);
         else fout<<query(a,b,1,n,1)<<'\n';}
    return 0;
}