Cod sursa(job #1496864)

Utilizator andi12Draghici Andrei andi12 Data 5 octombrie 2015 18:18:58
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <cstdio>

using namespace std;
const int N=100005;
int aib[N];
int aibsize;
void ad(int x,int val)
{
    while(x<=aibsize)
    {
        aib[x]=aib[x]+val;
        x=x+(x&(-x));
    }
}
int suma(int x)
{
    int sum=0;
    while(x>=1)
    {
        sum=sum+aib[x];
        x=x&(x-1);
    }
    return sum;
}
int main()
{
    FILE *in,*out;
    in=fopen("aib.in","r");
    out=fopen("aib.out","w");
    int n,m,i,x,cod,y,put,ras;
    fscanf(in,"%d%d",&n,&m);
    aibsize=n;
    for(i=1;i<=n;i++)
    {
        fscanf(in,"%d",&x);
        ad(i,x);
    }
    for(i=1;i<=m;i++)
    {
        fscanf(in,"%d",&cod);
        if(cod==2)
        {
            fscanf(in,"%d",&x);
            put=1<<20;
            ras=0;
            while(put>=1)
            {
                if(ras+put<=n && suma(ras+put)<=x)
                {
                    ras=ras+put;
                }
                put=put/2;
            }
            fprintf(out,"%d\n",ras);
        }
        else
        {
            fscanf(in,"%d%d",&x,&y);
            {
                if(cod==0)
                {
                    ad(x,y);
                }
                if(cod==1)
                {
                    fprintf(out,"%d\n",suma(y)-suma(x-1));
                }
            }
        }
    }
    return 0;
}