Cod sursa(job #3231632)

Utilizator Shaan_StefanShaan Stefan Shaan_Stefan Data 27 mai 2024 13:57:19
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>
#include <algorithm>
#define lsb(a) (a&(-a))

#define MOD 1000000007
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n, q, x;
long long aib[100010];

long long detval(int x)
{
    long long sum=0;
    for(int j=x; j>=1; j-=lsb(j))
        sum+=aib[j];
    return sum;
}
int main()
{
    fin>>n>>q;
    for(int i=1; i<=n; i++)
    {
        fin>>x;
        for(int j=i; j<=n; j+=lsb(j))
        {
            aib[j]+=x;
        }
    }
    aib[n+1]=999999;
    /*for(int i=1; i<=n; i++)
        fout<<aib[i]<<' ';*/

    int cd, a, b;
    for(int i=1; i<=q; i++)
    {
        fin>>cd;
        switch (cd)
        {
        case 0:
            fin>>a>>b;
            for(int j=a; j<=n; j+=lsb(j))
                aib[j]+=b;
            break;
        case 1:
            fin>>a>>b;
            fout<<detval(b)-detval(a-1)<<'\n';
            break;
        case 2:
            fin>>a;

            int sum=0, pos=1, lv=0;
            while(sum<a)
            {
                for(pos=1; (pos<<1)<=n && (pos<lsb(lv) || lv==0) && sum+aib[(pos<<1)+lv]<=a; pos=(pos<<1));

                sum+=aib[pos+lv];
                //fout<<pos<<' ';
                lv+=pos;
            }
            fout<<lv<<'\n';
            break;
        }
    }
    return 0;
}