Cod sursa(job #2227658)

Utilizator mihai50000Mihai-Cristian Popescu mihai50000 Data 1 august 2018 12:45:04
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in ("aib.in");
ofstream out ("aib.out");

const int N = 1e5 + 7;

int n;
int a[N];

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


int sum(int x)
{
	int sum = 0;
	for(int i = x; i >= 1; i -= i & (-i)) 
		sum += a[i];
	return sum;
}

int bs(int x)
{
	int st = 1;
	int dr = n;
	while(st <= dr)
	{
		int mid;
		mid = (st + dr) / 2;
		if(sum(mid) == x)
			return mid;
			
		if(sum(mid) < x) 
			st = mid + 1;
		else 
			dr = mid - 1;
	}
	return -1;
}

int main()
{
	int q;
	in >> n >> q;
	for(int i = 1; i <= n; i++)
	{
		int x;
		in >> x;
		update(i, x);
	}
	while(q--)
	{
		int cerinta;
		in >> cerinta;
		int a, b;
		switch(cerinta)
		{
			case(0) : in >> a >> b; update(a, b); break;
			case(1) : in >> a >> b; out << sum(b) - sum(a - 1) << '\n'; break;
			case(2) : in >> a; out << bs(a) << '\n';
		}
	}
}