Cod sursa(job #2383621)

Utilizator AlexPascu007Pascu Ionut Alexandru AlexPascu007 Data 19 martie 2019 18:13:31
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#define DIM 100010
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,i,j,st,dr,x,a,b,cod,sol;
int A[DIM];
void update(int poz,int val) {
	for (;poz<=n;poz+=(poz&-poz))
		A[poz]+=val;
}
int query(int poz) { //returneaza valoarea sumei A[1]+A[2]+...+A[poz]
	int val=0;
	for (;poz;poz-=(poz&-poz))
		val+=A[poz];
	return val;
}
int cb(int val) {
	int st=1, dr=n;
	while (st<=dr) {
		int mid=(st+dr)/2;
		if (query(mid)==val)
			return mid;
		if (query(mid)>val)
			dr=mid-1;
		else
			st=mid+1;
	}
	return -1;
}
int main() {
	fin>>n>>m;
	for (i=1;i<=n;i++) {
		fin>>x;
		update(i,x); //initializam structura facand update cu elementele vectorului
	}
	while (m--) {
		fin>>cod;
		switch(cod) {
	case 0:
		fin>>a>>b;
		update(a,b);
		break;
	case 1:
		fin>>a>>b;
		sol=query(b)-query(a-1);
		fout<<sol<<"\n";
		break;
	case 2:
		fin>>a;
		fout<<cb(a)<<"\n";
		break;
		}
	}
	return 0;
}