Cod sursa(job #303989)

Utilizator tibiletsKoos Tiberiu Iosif tibilets Data 10 aprilie 2009 17:51:47
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <fstream.h>
int N,M,a,b,A[100001],p,i=1;
void act(int a, int b)
{p=0;
 while(a<=N)
 {A[a]+=b;
  while(!(a&(1<<p)))
   ++p;
  a+=1<<p;
  ++p;}
}
int in(int a)
{p=0;b=0;
 while(a>0)
 {b+=A[a];
  while(!(a&(1<<p)))
   ++p;
  a-=1<<p;
  ++p;}
 return b;}
int caut(int a)
{i=0;p=1;
 while(p<N)
  p<<=1; 
 while(p)
 {b=i+p;
  if(b<=N)
   if(a>=A[b]) 
   {i+=p;a-=A[i];
    if(!a)return i;}
  p>>=1;	 
 }
 return -1;}
int main()
{ifstream f("aib.in");
ofstream g("aib.out");
f>>N>>M;
for(;i<=N;++i)
{f>>a;
 act(i,a);}
for(;M;--M)
{f>>p;
 if(p<2)
 {f>>a>>b;
  if(!p)act(a,b);
  else g<<in(b)-in(a-1)<<'\n';}
 else
 {f>>a;
  g<<caut(a)<<'\n';}
}
return 0;
}