Cod sursa(job #1363116)

Utilizator alex_ovidiunituAlex Ovidiu Nitu alex_ovidiunitu Data 26 februarie 2015 18:35:00
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <iostream>
#include<fstream>
#define N 20000
using namespace std;
int n,m,x,poz,A[N*4],answer,a,b;
void update(int st, int dr, int nod)
{
    if (st==dr)
        A[nod]+=x;
    else
    {
        int mij=(st+dr)/2;
        if (poz<=mij)
            update(st,mij,nod*2);
        else
            update(mij+1,dr,nod*2+1);
        A[nod]=A[nod*2]+A[nod*2+1];
    }

}
void query(int st, int dr, int nod)
{
    if (a<=st && dr<=b)
        answer+=A[nod];
    else
    {
        int mij=(st+dr)/2;
        if (a<=mij)
            query(st,mij,nod*2);

        if (b>=mij+1)
            query(mij+1,dr,nod*2+1);
    }
}
int main()
{
    int i,cod;
    fstream f,g;
    f.open("datorii.in",ios::in);
    g.open("datorii.out",ios::out);
    f>>n>>m;
    for (i=1;i<=n;i++)
    {
        f>>x;
        poz=i;
        update(1,n,1);
    }

    for (i=1;i<=m;i++)
    {
        f>>cod;
        if (cod==0)
        {
            f>>poz>>x;
            x=-x;
            update(1,n,1);
        }
        else
        {
            f>>a>>b;
            answer=0;
            query(1,n,1);
            g<<answer<<'\n';
        }
    }
}