Cod sursa(job #2717219)

Utilizator BaraianTudorBaraian Tudor Stefan BaraianTudor Data 6 martie 2021 18:32:20
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#define zero(x) x&(x^(x-1))
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int n,m,v[100005],a,b,cod,s;
void adaug()
{
    for(int i=a;i<=n;i+=zero(i))
    {
        v[i]+=b;
    }
}
int sum(int t)
{
    s=0;
    for(int i=t;i>0;i-=zero(i))
    {
        s+=v[i];
    }
    return s;
}
int caut()
{
    int poz=0;
    for(int i=1<<30;i>0;i=i>>1)
    {
        if(poz+i<=n)
        {
            if(sum(poz+i)<=a)
                poz+=i;
        }
    }
    return poz;
}
int main()
{
    in>>n>>m;
    for(a=1;a<=n;a++)
    {
        in>>b;
        adaug();
    }
    for(int i=1;i<=m;i++)
    {
        in>>cod>>a;
        if(cod==0)
        {
            in>>b;
            adaug();
        }
        if(cod==1)
        {
            in>>b;
            out<<sum(b)-sum(a-1)<<'\n';
        }
        if(cod==2)
        {
            out<<caut()<<'\n';
        }
    }
    return 0;
}