Cod sursa(job #831639)

Utilizator GaborGabrielFMI - GabrielG GaborGabriel Data 8 decembrie 2012 21:19:11
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

long long n,m,v[30000],i;

int querry(int nod,int left,int right,int a, int b)
{
    if(a<=left & right<=b)
        return v[nod];
    long long middle = (left+right)/2,i1=0,i2=0;
    if(a<=middle) i1=querry(2*nod,left,middle,a,b);
    if(b>middle) i2=querry(2*nod+1,middle+1,right,a,b);
    return i1+i2;
}

void update(int nod,int left,int right,int pos,int value,int semn)
{
    if(left==right)
        v[nod]+= semn*value;
    else
    {
        int middle = (left+right)/2;
        if(pos<=middle) update(2*nod,left,middle,pos,value,semn);
        else update(2*nod+1,middle+1,right,pos,value,semn);
        v[nod] = v[2*nod]+v[2*nod+1];
    }
}

int main()
{
    int a,b,c;
    f>>n>>m;
    for(i=1;i<=n;i++)
        f>>a,update(1,1,n,i,a,1);

    for(i=1;i<=m;i++)
    {
        f>>a>>b>>c;
        if(a)
            g<<querry(1,1,n,b,c)<<'\n';
        else
            update(1,1,n,b,c,-1);
    }
    return 0;
}