Cod sursa(job #831642)

Utilizator GaborGabrielFMI - GabrielG GaborGabriel Data 8 decembrie 2012 21:24:24
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <stdio.h>
using namespace std;
FILE *f=fopen("datorii.in","r");
FILE *g=fopen("datorii.out","w");

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;
    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=n;i++)
        fscanf(f,"%d",&a),update(1,1,n,i,a,1);

    for(i=1;i<=m;i++)
    {
        fscanf(f,"%d%d%d",&a,&b,&c);
        if(a)
            fprintf(g,"%d\n",querry(1,1,n,b,c));
        else
            update(1,1,n,b,c,-1);
    }
    return 0;
}