Cod sursa(job #2449505)

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

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()
{
	
	int n, m;
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; i++)
	{
		int x;
		scanf("%d", &x);
		add(i, n, x);
	}
	for (int i = 0; i < m; i++)
	{
		int t, a, b;
		scanf("%d", &t);
		switch (t)
		{
		case 0:
			scanf("%d%d", &a, &b);
			add(a, n, b);
			break;
		case 1:
			scanf("%d%d", &a, &b);
			cout << sum(b) - sum(a-1) << '\n';
			break;
		case 2:
			scanf("%d", &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;
		
		}
	}

}