Cod sursa(job #563820)

Utilizator dicu_dariaDaria Dicu dicu_daria Data 26 martie 2011 08:59:12
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#define zeros(x) ((((x-1)^x)+1)/2)
using namespace std;

ifstream fi("aib.in");
ofstream fo("aib.out");
int aib[100005],n,m;
void add(int i,int val)
{
    for( ;i<=n;i+=zeros(i))
        aib[i]+=val;
}
int Query(int a)
{
    int s=0,i;
    for(i=a;i>=1;i-=zeros(i)) s+=aib[i];
    return s;
}
int minim(int val)
{
    int i,step;
    for(step=1;step<n;step<<=1);
    for(i=0;step;step>>=1)
    if(i+step<=n and Query(i+step)<=val) i+=step;
    return i;
}
int main()
{
    int tip,a,b,i;
    fi>>n>>m;
    for(i=1;i<=n;i++) fi>>a, add(i,a);
    for(i=1;i<=m;i++)
    {
        fi>>tip>>a;
        if(tip<2) fi>>b;
        if(tip==0) add(a,b);
        if(tip==1) fo<<Query(b)-Query(a-1)<<"\n";
        if(tip==2) fo<<minim(a)<<"\n";
    }
    return 0;
}