Cod sursa(job #1138207)

Utilizator j.loves_rockJessica Joanne Patrascu j.loves_rock Data 9 martie 2014 19:03:47
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<fstream>

using namespace std;
int tree[2 << 15], n, m, i, val, poz, cod, sum, l, r;
void update(int rad, int left, int right)
{
    if(left==right)

        tree[rad]-=val;

    else
    {
        int med=(left+right) / 2;
        if(poz<=med) update(2*rad,left,med);
        else update(2*rad+1, med+1, right);
        tree[rad] = tree[2*rad] + tree[2*rad+1];
    }
}

void query(int rad, int left, int right)
{
    if(l<=left && right<=r)
        sum+=tree[rad];
    else
    {
        int med=(left + right)/2;
        if(l<=med)
            query(2*rad,left,med);
        if(r > med)
            query(2*rad+1,med+1,right);
    }
}

int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1; i<=n; i++)
    {
        scanf("%d",&val);
        val = 0 - val;
        poz=i;
        update(1,1,n);
    }
    for(i=1; i<=m; i++)
    {
        scanf("%d",&cod);
        if(cod==0)
        {
            scanf("%d%d",&poz,&val);
            update(1, 1, n);
        }
        else
        {
            scanf("%d%d",&l,&r);
            sum=0;
            query(1,1,n);
            printf("%d\n",sum);
        }
    }
    return 0;
}