Cod sursa(job #2176399)

Utilizator UnseenMarksmanDavid Catalin UnseenMarksman Data 17 martie 2018 06:06:13
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <cstdio>
#define NMAX 15002
using namespace std;

int n, q, pos, val, sum, start, finish;
int Arb[4*NMAX+66];

void update(int nod, int st, int dr)
{
    if(st == dr)
    {
        Arb[nod]=Arb[nod]+val;
    }
    else
    {
        int mid=(st+dr)/2;

        if(pos<=mid) update(2*nod,st,mid);

        else update(2*nod+1,mid+1,dr);

        Arb[nod]=Arb[nod*2]+Arb[nod*2+1];
    }
}

void query(int nod, int st, int dr)
{
    if(start<=st && dr<=finish)
    {
        sum=sum+Arb[nod];
    }
    else
    {
        int mid=(st+dr)/2;

        if(start<=mid)
        {
            query(nod*2,st,mid);
        }
        if(mid<finish)
        {
            query(nod*2+1,mid+1,dr);
        }
    }
}

int main()
{
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);

    int cod,a,b,x;

    scanf("%d%d", &n, &q);
    for(int i=1; i<=n; i++)
    {
        scanf("%d", &x);
        pos=i;
        val=x;
        update(1,1,n);
    }
    while(q--)
    {
        scanf("%d%d%d", &cod, &a, &b);

        if(!cod)
        {
            pos=a;
            val=-b;
            update(1,1,n);
        }
        else
        {
            sum=0;
            start=a;
            finish=b;
            query(1,1,n);

            printf("%d\n", sum);
        }
    }
    return 0;
}