Cod sursa(job #1396755)

Utilizator LycrsTrifan Tamara Lycrs Data 22 martie 2015 22:49:30
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include<string>

using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");

int n, i, j, m, a, b, T[100005], c[11], x, y, k, o;

void Update(int idx, int val){
	
	while (idx<=n)
		{
			T[idx]+=val;
			idx+=idx & -idx;
		}
}

int Del(int y, int x){
	int s=0;
	
	while(x)
	{
		s+=T[x];
		x-=x & -x;
	}
	
	--y;
	while(y)
	{
		s-=T[y];
		y-=y & -y;
	}
	
	return s;
}

int main()
{
	cin>>n>>m;
	
	for(i=1; i<=n; ++i)
		cin>>x, Update(i, x);
		
	for(i=1; i<=m; ++i){
		cin>>o;
		if (o==0)
			cin>>a>>b,
			Update(a, b);
		else if(o==1)
			cin>>a>>b,
			cout<<Del(a, b)<<'\n';
		else if(o==2)
		{
			cin>>a;
			x=1; y=n; b=0;
			while (x<=y && b==0)
			{
				int m=(x+y)/2;
				if (a==T[m]) b=m;
				else if (a<T[m])
						y=m-1;
				else if (a>T[m])
						x=m+1;
			}
			if (b==0) b=-1;
			cout<<b<<'\n';
		}
	}
			
	return 0;
}