Cod sursa(job #2449503)

Utilizator r00t_Roman Remus r00t_ Data 19 august 2019 22:46:07
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>

using namespace std;

int tree[100200];

int p(int k)
{
	return k & -k;
}

void add(int k, int n, int x)
{
	while (k <= n)
	{
		tree[k] += x;
		k += k & -k;
	}
}

int sum(int k) // sum from index 1 to index k
{
	int s = 0;
	while (k >= 1)
	{
		s += tree[k];
		k -= k & -k;
	}
	return s;
}


int main()
{
	ios_base::sync_with_stdio(false);
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		int x;
		cin >> x;
		add(i, n, x);
	}
	for (int i = 0; i < m; i++)
	{
		int t, a, b;
		cin >> t;
		switch (t)
		{
		case 0:
			cin >> a >> b;
			add(a, n, b);
			break;
		case 1:
			cin >> a >> b;
			cout << sum(b) - sum(a-1) << '\n';
			break;
		case 2:
			cin >> a;
			bool fd = 0;
			for (int j = 1; j <= n; j++)
			{
				if (sum(j) == a)
				{
					cout << j << '\n';
					fd = 1;
					break;
				}
			}
			if (!fd)
				cout << -1 <<'\n';
			break;
		
		}
	}

}