Cod sursa(job #1695386)

Utilizator dorin31Geman Dorin Andrei dorin31 Data 26 aprilie 2016 23:29:33
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>

#define maxN 15000

using namespace std;

ifstream fin("datorii.in");
ofstream fout("datorii.out");

int n,m,aint[3*maxN];
int poz, val, start, finish, S, Q;

void update(int nod, int st, int dr)
{
    if (st==dr)
    {
        aint[nod]+=val;
        return;
    }
    int mid=(st+dr)/2;
    if (poz<=mid) update(2*nod, st, mid);
    else update(nod*2+1, mid+1, dr);
    aint[nod]=aint[2*nod]+aint[2*nod+1];
}

void query(int nod, int st, int dr)
{
    if (start<=st && dr<=finish)
    {
        S+=aint[nod];
        return;
    }
    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()
{
    fin>>n>>m;

    for (int i=1; i<=n; ++i)
    {
        fin>>val;
        poz=i;
        update(1,1,n);
    }

    while (m--)
    {
        fin>>Q;
        if (!Q)
        {
            fin>>poz>>val;
            val*=-1;
            update(1,1,n);
        }
        else
        {
            fin>>start>>finish;
            S=0;
            query(1,1,n);
            fout<<S<<'\n';
        }
    }

    return 0;
}