Cod sursa(job #2218858)

Utilizator AlexDabuDabu Alexandru AlexDabu Data 6 iulie 2018 00:54:10
Problema Arbori indexati binar Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

#define NMAX 100001

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

int n, m;
int AIB[NMAX] = { 0 };

void Add(int index, int value)
{
	for (index; index <= n; index++)
	{
		AIB[index] += value;
	}
}

int BinarySearch(int value)
{
	int index = 0;
	int left = 1, right = n, middle;
	while (left <= right)
	{
		middle = (left + right) / 2;
		if (value == AIB[middle])
		{
			return middle;
		}
		(value < AIB[middle]) ? (right = middle - 1) : (left = middle + 1);
	}
	return -1;
}

void Read(void)
{
	int prop;
	fin >> n >> m;

	for (int i = 1; i <= n; i++)
	{
		fin >> AIB[i];
		AIB[i] += AIB[i - 1];
	}

	int a, b, operation , index;
	for (int j = 0; j < m; j++)
	{
		fin >> operation;
		if (operation == 2)
		{
			fin >> a;
		}
		else
		{
			fin >> a >> b;
		}

		switch (operation)
		{
		case 0:
			Add(a, b);
			break;
		case 1:
			fout << AIB[b] - AIB[a - 1] << '\n';
			break;
		case 2:
			fout << BinarySearch(a) << '\n';
			break;
		}
	}
}

int main(void)
{
	Read();
	return 0;
}