Cod sursa(job #1349326)

Utilizator Pintilie_AndreiFII-Pintilie Andrei Pintilie_Andrei Data 20 februarie 2015 09:35:10
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <iostream>
#include <fstream>
#define N 15003
using namespace std;
int a[N];
int n,m,val,poz,start,stop,sol;
void Update(int nod, int st,int dr )
{
    if(st==dr)
    {
        a[nod]+=val;
        return ;
    }
    int mij=(st+dr)/2;
    if(poz<=mij) Update(2*nod,st,mij);
    else Update(2*nod+1,mij+1,dr);
    a[nod]=a[nod*2]+a[nod*2+1];
}
void Query(int nod,int st,int dr)
{
    if(start<=st && stop>=dr)
    {
        sol+=a[nod];
        return ;
    }
    int mij=(st+dr)/2;
    if(mij>=start) Query(2*nod,st,mij);
    if(mij<stop) Query(2*nod+1,mij+1,dr);

}
int main()
{
    ifstream fin("datorii.in");
    fin>>n>>m;
    int i,x,op,y;
    for(i=1; i<=n; i++)
    {
        fin>>x;
        poz=i;
        val=x;
        Update(1,1,n);
    }
//    for(i=1; i<=n+n; i++)
//    cout<<a[i]<<" ";
//    cout<<"\n";
    ofstream fout("datorii.out");
    for(i=1; i<=m; i++)
    {
        fin>>op>>x>>y;
        if(op)
        {
            sol=0;
            start=x;
            stop=y;
            Query(1,1,n);
            fout<<sol<<"\n";
        }
        else
        {
            poz=x;
            val=-y;
            Update(1,1,n);
        }
    }
    return 0;
}