Cod sursa(job #3231604)

Utilizator Shaan_StefanShaan Stefan Shaan_Stefan Data 27 mai 2024 12:06:41
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 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;
        }
    }
    /*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 st=1, dr=n, mij;
            while(st<=dr)
            {
                mij=(st+dr)/2;
                if(detval(mij)>=1ll*a)
                    dr=mij-1;
                else
                    st=mij+1;
            }
            fout<<st<<'\n';
            break;
        }
    }
    return 0;
}