Cod sursa(job #1369377)

Utilizator StefanMudragMudrag Stefan StefanMudrag Data 3 martie 2015 00:15:50
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<iostream>
#include<fstream>
#define NMAX 15001
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n,m;
int g[NMAX];
int arb[4*NMAX],sum,start,stop;
void build(int nod,int st,int dr)
{
    if(st==dr)
    {
        arb[nod]=g[st];
        return ;
    }
    int mij=(st+dr)/2;
    build(2*nod,st,mij);
    build(2*nod+1,mij+1,dr);
    arb[nod]=arb[2*nod]+arb[2*nod+1];
}
int query(int nod,int st,int dr)
{
    if(start<=st&&dr<=stop)
        return arb[nod];
    int mij=(st+dr)/2;
    int x1,x2;x1=x2=0;
    if(start<=mij)x1=query(2*nod,st,mij);
    if(stop>mij)x2=query(2*nod+1,mij+1,dr);
    return sum=x1+x2;
}
int main()
{   int op,x,y;
    fin>>n>>m;
    for(int i=1;i<=n;i++)
        fin>>g[i];
    build(1,1,n);
    for(int i=1;i<=m;i++)
    {
        fin>>op;
        if(!op)
        {
            fin>>x>>y;
            g[x]-=y;
            build(1,1,n);
        }
        else
        {
            fin>>start>>stop;
            sum=0;
            fout<<query(1,1,n)<<'\n';
        }
    }
    fin.close();
    fout.close();
    return 0;
}