Cod sursa(job #583791)

Utilizator stef93Stefan Gilca stef93 Data 22 aprilie 2011 17:37:51
Problema Datorii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <iostream>
using namespace std;

int n,m,sum;
int aint[15003*4];

void update(int nod,int l,int r,int x,int p)
{
    if(l==r)
    {
        aint[nod]+=x;
        return;
    }
    int k=(l+r)/2;
    if(p<=k)update(2*nod,l,k,x,p);
    else update(2*nod+1,k+1,r,x,p);
    aint[nod]+=x;
}

int querry(int nod,int l,int r,int x,int y)
{
    int t=0;
    if(x<=l&&r<=y)
    return aint[nod];
    else{
    int k=(l+r)/2;
    if(x<=k) t+=querry(2*nod,l,k,x,y);
    if(y>k) t+=querry(2*nod+1,k+1,r,x,y);}
    return t;
}
int main()
{
    int i,op,x,y;
    ifstream in("datorii.in");
    ofstream out("datorii.out");
    in>>n>>m;
    for(i=1;i<=n;i++)
    {
        in>>x;
        if(x!=0)
        update(1,1,n,x,i);
    }
    for(i=1;i<=30;i+=i)
    cout<<aint[i]<<' ';
    for(i=0;i<m;i++)
    {
        in>>op>>x>>y;
        if(op==1){sum=0;querry(1,1,n,x,y);
            out<<querry(1,1,n,x,y)<<'\n';}
        else update(1,1,n,-y,x);
    }
    in.close(),out.close();
    return 0;
}