Cod sursa(job #3273319)

Utilizator ArthurrrfubinacaARthur Paun Arthurrrfubinaca Data 1 februarie 2025 16:48:08
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>
#define NMAX 200005

using namespace std;

ifstream fin("aib.in");
ofstream fout("aib.out");

int n , m;
int aib[NMAX];

void update(int pos , int val)
{
    for(int i = pos ; i <= n ; i+=i&(-i))
        aib[i] += val;
}

int sum(int pos)
{
    int suma = 0;
    for(int i = pos ; i > 0 ; i-=i&(-i))
        suma += aib[i];
    return suma;
}

int cb(int val)
{
    int st = 1 , dr = n;
    while(st <= dr)
    {
        int mij = (st + dr) / 2;
        int suma = sum(mij);
        if(suma == val)
            return mij;
        else if(suma > val)
        {
            dr = mij - 1;
        }
        else
            st = mij + 1;
    }
    return -1;
}

int main()
{
    fin >> n >> m;

    for(int i = 1 ; i <= n ; i++)
    {
        int x;

        fin >> x;

        update(i , x);
    }

    for(int i = 1 ; i <= m ; i++)
    {
        int a , b , q;
        fin >> q;
        if(q == 0)
        {
            fin >> a >> b;
            update(a , b);
        }
        else if(q == 1)
        {
            fin >> a >> b;
            fout << sum(b) - sum(a-1) << '\n';
        }
        else
        {
            fin >> a;
            fout << cb(a) << '\n';
        }
    }
    return 0;
}