Cod sursa(job #1365444)

Utilizator delia_99Delia Draghici delia_99 Data 28 februarie 2015 11:58:07
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int i,n,m,op,val,A[60010],p,sol;

void upd(int nod,int a,int b,int st,int dr)
{
    int mij;
    if(a<=st && dr<=b)
    {
        A[nod]+=val;
        return;
    }
    mij=st+(dr-st)/2;
    if(a<=mij)
      upd(nod*2,a,b,st,mij);
    else upd(nod*2+1,a,b,mij+1,dr);
    A[nod]=A[2*nod]+A[2*nod+1];
}

void find(int nod,int a,int b,int st,int dr)
{
    int mij;
    if(a<=st && dr<=b)
    {
        sol+=A[nod];
        return;
    }
    mij=st+(dr-st)/2;
    if(a<=mij)
      find(nod*2,a,b,st,mij);
    if(mij<b) find(nod*2+1,a,b,mij+1,dr);
}

int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d %d\n",&n,&m);
    for(i=1;i<=n;++i)
    {
        scanf("%d ",&val);
        upd(1,i,i,1,n);
    }
    for(i=1;i<=m;++i)
    {
        scanf("%d %d %d\n",&op,&p,&val);
        if(op==0)
          {val*=-1;upd(1,p,p,1,n);}
        else
        {
            sol=0;
            find(1,p,val,1,n);
            printf("%d\n",sol);
        }
    }
    return 0;
}