Cod sursa(job #2443019)

Utilizator filiptudose2007Tudose Filip filiptudose2007 Data 26 iulie 2019 11:25:30
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int Ai[400005],i,n,a,b,m,c,x;
void Update(int val, int poz, int nod, int a, int b)
{
    if(a==b)
    {
        Ai[nod]+=val;
        return ;
    }
    int mij=(a+b)/2;
    if(poz<=mij)Update(val,poz,nod*2,a,mij);
    else Update(val,poz,nod*2+1,mij+1,b);
    Ai[nod]=Ai[nod*2]+Ai[nod*2+1];
}
int query(int nod, int a, int b, int qa, int qb)
{
    if(a>=qa && b<=qb)
    {
        return Ai[nod];
    }
    int rez1=0,rez2=0,mij=(a+b)/2;
    if(qa<=mij) rez1=query(nod*2,a,mij,qa,qb);
    if(qb>mij) rez2=query(nod*2+1,mij+1,b,qa,qb);
    return rez1+rez2;
}
int main()
{
    f>>n>>m;
    for(i=1;i<=n;++i)
    {
        f>>x;
        Update(x,i,1,1,n);
    }
    for(i=1;i<=m;++i)
    {
        f>>c>>a>>b;
        if(c==0)Update(-b,a,1,1,n);
        else g<<query(1,1,n,a,b)<<'\n';
    }
    return 0;
}