Cod sursa(job #337302)

Utilizator IoannaPandele Ioana Ioanna Data 3 august 2009 12:38:23
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>
#define tmax 35000
#define nmax 15000
long t[tmax],n,m,a[nmax];

void update(long k,long st,long dr,long i,long a)
{
long m;
if (st==dr)
   {
    t[k]=a;
    return;
   }
m=(st+dr)>>1;
if (i<=m)
    update(k<<1,st,m,i,a);
else update((k<<1)+1,m+1,dr,i,a);
t[k]=t[k<<1]+t[(k<<1)+1];
}

void read()
{
scanf("%ld%ld",&n,&m);
long i;
for (i=1;i<=n;i++)
    {
     scanf("%ld",&a[i]);
     update(1,1,n,i,a[i]);
    }
}

long interogare(long k,long st,long dr,int b,int c)
{
long m,fs=0,fd=0;
if (b<=st && c>=dr)
   return t[k];
m=(st+dr)>>1;
if (b<=m)
   {
    fs=interogare(k<<1,st,m,b,c);
   }
if (c>=m+1)
    fd=interogare((k<<1)+1,m+1,dr,b,c);
return fs+fd;
}

int main()
{
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
read();
long i;
int o,b,c;
for (i=1;i<=m;i++)
    {
     scanf("%d%d%d",&o,&b,&c);
     if (o==0)
        {
         a[b]-=c;
         update(1,1,n,b,a[b]);
        }
    else printf("%ld\n",interogare(1,1,n,b,c));
    }
return 0;
}