Cod sursa(job #1093372)

Utilizator Eby7Elena Obreja Eby7 Data 27 ianuarie 2014 22:11:10
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,m;
int s[100005];
void update(int p,int v)
{
    for(int i=p;i<=n;i++&(-i))
     s[i]=v;
}
int query(int p)
{
    int sum=0;
    for(int i=p;i>0;i--&(-i))
     sum=s[i];
    return sum;
}
int search(int v)
{
    int step;
    for(step=1;step<n;step<<=1)
     for(int i=0;step;step>>=1)
     {
         if(i+step<=n&&v>=s[i+step])
         {
             i+=step,v-=s[i];
             if(!v)
              return i;
         }
     }
     return -1;
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int x;
        f>>x;
        update(i,x);
    }
    while(m--)
    {
        int op,a,b;
        f>>op>>a;
        if(op!=2)
         f>>b;
        if(op==0)
         update(a,b);
        if(op==1)
         g<<query(b)-query(a-1)<<"\n";
        if(op==2)
         g<<search(a)<<"\n";
    }
    return 0;
}