Cod sursa(job #2903361)

Utilizator petru-robuRobu Petru petru-robu Data 17 mai 2022 15:28:00
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>
#define lsb(x) x & (-x)

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

#define N 100001

int aib[N], n, q, x;

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

int query (int pos)
{
    int s = 0;
    for (int i = pos; i >= 1; i -= lsb(i))
        s += aib[i];
    return s;
}

int binary_search(int x)
{
	int st = 1, dr = n;
	while (st <= dr)
  {
		int mij = (st + dr) / 2;
		if (query(mij) < x)
			st = mij + 1;
		else
			dr = mij - 1;
	}
	return st;
}


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

    for(int i=1; i<=n; i++)
    {
        fin>>x;
        update(i, x);
    }

    for(int i=1; i<=q; i++)
    {
        int ind, a, b;
        fin>>ind>>a;
        if(ind == 0)
        {
            fin>>b;
            update (a, b);
        }
        else if(ind == 1)
        {
            fin>>b;
            fout<< query(b) - query(a-1) <<'\n';
        }
        else
        {
            fout << binary_search(a) <<'\n';
        }

    }

}