Cod sursa(job #3334280)

Utilizator herbiHreban Antoniu George herbi Data 17 ianuarie 2026 10:05:24
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");

vector<int>aib;
int n, q;
int x, y, z;
int lsb(int x)
{
	return (x & (-x));
}

int query(int idx) {
	int sum = 0;
	// Mergem descrescator scazand LSB
	for (; idx > 0; idx -= (idx & -idx)) {
		sum += aib[idx];
	}
	return sum;
}


void update(int idx, int val) {
	// Mergem crescator adaugand LSB
	for (; idx <= n; idx += (idx & -idx)) {
		aib[idx] += val;
	}
}
int c2(int a)
{	
	for (int i = 0;  (1<<i)<= n; i++)
		if (aib[(1 << i)] == a)
			return (1<<i);
}
void citire_solve()
{
	fin >> n >> q;
	aib.resize(n + 1, 0);
	for (int i = 1; i <= n; i++)
	{
		fin >> x;
		update(i, x);
	}
	for (int i = 1; i <= q; i++)
	{
		fin >> x;
		if (x == 0)
		{
			fin >> y >> z;
			update(y, z);
		}
		else if (x == 1)
		{
			fin >> y >> z;
			fout << query(z) - query(y - 1)<<'\n';
		}
		else if (x == 2)
		{
			fin >> y;
			fout << c2(y)<<'\n';
		}
	}
}

int main()
{
	citire_solve();

	return 0;
}