Cod sursa(job #45735)

Utilizator g3ppyStoian Vlad g3ppy Data 1 aprilie 2007 20:36:17
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
#include <math.h>
#define NRM 15000
FILE *fin,*fout;

long n,m,i,l,val,ind,poz,x,dr,st,s1,s2;

int a[NRM];

int query(int x)
{
    int r = 0;
    for (; x; x -= x ^ (x-1) & x)
	r += a[x];
    return r;
}

void update(int x, int v)
{
      for (; x <= n; x += x^(x-1) & x)
	  a[x] += v;
}


int main()

{

fin=fopen("datorii.in","rt");
fout=fopen("datorii.out","wt");

fscanf(fin,"%ld %ld",&n,&m);
for (i=1;i<=n;i++)
 {
 fscanf(fin,"%ld",&val);
 update(i,val);
 }
for (i=1;i<=m;i++)
    {
    fscanf (fin,"%ld",&l);
    if (l==1)
       {
       fscanf(fin,"%ld %ld",&st,&dr);
       s1=query(dr);
       s2=query(st-1);
       fprintf(fout,"%ld\n",s1-s2);
       }

    else
      {
       fscanf(fin,"%ld %ld",&ind,&val);
       val=val*-1;
       update(ind,val);
      }

    }


fprintf(fout,"\n");

return 0;
}