Cod sursa(job #14396)

Utilizator pitradaPit-Rada Ionel-Vasile pitrada Data 8 februarie 2007 22:01:23
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<fstream>
using namespace std;
fstream f,g;

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

int raspuns(int A[],int nod, int st, int dr, int a, int b)
{
int t=0,mij;
if ((a<=st)&&(dr<=b))
   return A[nod];
  else
  {
  mij=(st+dr)/2;
  if (a<=mij) t+=raspuns(A,2*nod,st,mij,a,b);
  if (mij+1<=b) t+=raspuns(A,2*nod+1,mij+1,dr,a,b);
  return t;
  }
}


int main()
{
int A[33000],N,K=16384,M,i,j,x,y,z;

f.open("datorii.in",ios::in);
g.open("datorii.out",ios::out);

f>>N>>M;
for (i=1;i<=2*K;i++) A[i]=0;

for (i=1;i<=N;i++)
  {
  f>>x;
  inserare(A,1,1,K,i,i,x);
  }
for (i=1;i<=M;i++)
  {
  f>>x>>y>>z;
  if (x==0) 
     {
     inserare(A,1,1,K,y,y,-z);
     }
     else
     {
     g<<raspuns(A,1,1,K,y,z)<<endl;
     }
  }


g.close();
f.close();
return 0;
}