Cod sursa(job #2229687)

Utilizator shantih1Alex S Hill shantih1 Data 7 august 2018 21:16:21
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>
#define zeros(x) (x^(x-1))&x

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

int n,m,i,x,y;
int A[100005];

void addvlap(int p,int v)
{
	for(int i=p;i<=n;i+=zeros(i))
		A[i]+=v;
}
int sum1p(int p)
{
	int rez=0;
	for(int i=p;i>0;i-=zeros(i))
		rez+=A[i];
	return rez;
}
int prims(int s)
{
	int i,step,k=0;
	for(step=1;step<n;step<<=1);
	for(i=0;step;step>>=1)
		if(i+step<=n && A[i+step]+k<=s)
		{
			i+=step;
			k+=A[i];
		}
	return i;
}

int main()
{
	fin>>n>>m;
	for(i=1;i<=n;i++)
	{
		fin>>x;
		addvlap(i,x);
	}
	for(i=1;i<=m;i++)
	{
		fin>>x;
		if(x==0)
		{
			fin>>x>>y;
			addvlap(x,y);
		}
		else if(x==1)
		{
			fin>>x>>y;
			fout<<sum1p(y)-sum1p(x-1)<<"\n";
		}
		else
		{
			fin>>y;
			fout<<prims(y)<<"\n";
		}
	}
}