Cod sursa(job #829781)

Utilizator lehman97Dimulescu David lehman97 Data 5 decembrie 2012 20:41:56
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <stdio.h>

using namespace std;

FILE *f=fopen("datorii.in","r");
FILE *g=fopen("datorii.out","w");

int n,m,i,a,b,x,v[50000],maxim;

void update(int l, int r,int pos, int val, int nod)
{
    int m=(l+r)/2;
    if(l==pos&&r==pos){v[nod]+=val;return;}
    else
    {
        if(pos<=m) update(l,m,pos,val,2*nod);
        else update(m+1,r,pos,val,2*nod+1);
    }
    v[nod]=v[2*nod]+v[2*nod+1];
}

void query(int l, int r,int nod,int start, int finish)
{
    int m=(l+r)/2,s1,s2;
    if ( start <= l && r <= finish )
    {
        maxim+=v[nod];
        return;
    }

    if ( start <= m ) query(l,m,2*nod,start,finish);
    if ( m < finish ) query(m+1,r,2*nod+1,start,finish);

}


int main()
{
    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        fscanf(f,"%d",&a);
        update(1,n,i,a,1);
    }
    for(i=1;i<=m;i++)
    {
        fscanf(f,"%d%d%d",&x,&a,&b);

        switch(x)
        {
            case 0:{b*=-1;update(1,n,a,b,1);break;}
            case 1:{maxim=0;query(1,n,1,a,b);fprintf(g,"%d\n",maxim);break;}
        }
    }
    fclose(g);
    return 0;
}