Cod sursa(job #1703265)

Utilizator andreip0paAndrei Popa andreip0pa Data 16 mai 2016 17:57:05
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <iostream>
#include <fstream>

using namespace std;
#define maxn 15000
ifstream f("datorii.in");
ofstream g("datorii.out");
int poz,val,suma=0,start,stop,N,M;
int Arb[2*maxn+50]={};

void afisare(){
    for (int i=1;i<=20;i++){

        cout<<Arb[i]<<" ";

    }
    cout<<endl;



}




void update(int n, int st, int dr)
{


if (st==dr){
        Arb[n]+=val;
    return;
           }
else       {
    int m=(st+dr)/2;
    if (poz<=m){
       update(2*n,st,m);
    }
    else{
        update(2*n+1,m+1,dr);
    }
Arb[n]=Arb[2*n]+Arb[2*n+1];
           }
}

int query(int x, int st, int dr)
{
if (start<=st && dr<=stop){
    return Arb[x];
}
int m=(st+dr)/2;
int mid=(1+N)/2;


if (start<=m){
    return (query(2*x,st,m));

}
if(m<stop){
    return (query(2*x+1,m+1,dr));
}




}




int main()
{
    int mid,x,a,b;

    f>>N>>M;
    for (int i=1; i<=N;i++)
    {
        f>>x;
        poz=i;
        val=x;
        update(1,1,N);
        afisare();


    }
    for (int i=1;i<=M;i++){

        f>>x>>a>>b;
        if (x==1){
            suma=0;
            start=a;
            stop=b;
            mid =(1+N)/2;
            if(start<=mid && mid<stop)
                g<<query(2*1,1,mid)+query(2*1+1,mid+1,N);
                else
                g<<query(1,1,N);
                g<<endl;




        }
        else {
            poz=a;
            val=-b;
            update(1,1,N);




        }




    }

}