Cod sursa(job #301435)

Utilizator bacerandreiBacer Andrei bacerandrei Data 8 aprilie 2009 11:00:13
Problema Arbori indexati binar Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream.h>
#define max 100010
ofstream g("aib.out");

long long n, m, i, a[max], s, x, y;
int p;


void update(long i, long x)
{
  for(;i<=n;i+=i&-i)
    a[i] += x;
}



long long ask(long i)
{
  long long sum = 0;
   for(;i;i-=i&-i)
     sum += a[i];
  return sum;
}



void binary_search(long x)
{
 long st = 1, dr = n, mij;
   while(st <= dr)
    {
      mij = (st+dr)/2;
       if(x == ask(mij))
	{
	   g<<mij<<"\n";
	   return;
	}
      else
	if(x < ask(mij))
	 dr = mij-1;
      else
	st = mij+1;
   }
 g<<"-1\n";
}



int main()
{
  ifstream f("aib.in");
   f>>n>>m;
    for(i = 1 ; i <= n ; i++)
      {
	f>>x;
	update(i, x);
      }
   for(i = 1 ; i <= m ; i++)
     {
       f>>p;
	if(p == 0)
	 {
	   f>>x>>y;
	   update(x, y);
	 }
       else
	 if(p == 1)
	  {
	    f>>x>>y;
	    g<<ask(y) - ask(x-1)<<"\n";
	  }
       else
	 {
	   f>>x;
	   binary_search(x);
	 }
    }
  return 0;
}