Cod sursa(job #458663)

Utilizator erzsikeRusz Elisabeta erzsike Data 25 mai 2010 18:46:01
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<fstream>
#include<cstdio>
using namespace std;

int ai[262000],poz,val,a,b,maxim;
/*
void afis(int n)
{
	for(int i=1; i<=n; ++i)
		printf("%d ",ai[i]);
	printf("\n");
}*/

void adauga(int nod, int s, int d)
{
	if(s==d) ai[nod]=val;
	else
	{
		int m=(s+d)/2;
		if(poz<=m) adauga(nod*2,s,m);
		else adauga(nod*2+1,m+1,d);
		
		if(ai[nod*2]>ai[nod*2+1]) ai[nod]=ai[nod*2];
		else ai[nod]=ai[nod*2+1];
	}
}

void detmax(int nod, int s, int d)
{
	if(a<=s && d<=b)
	{
		if(ai[nod]>maxim) maxim=ai[nod];
	}
	else
	{
		int m=(s+d)/2;
		if(m>=a) detmax(nod*2,s,m);
		if(m+1<=b) detmax(nod*2+1,m+1,d);
	}
}
		

int main()
{
	ifstream fin("arbint.in");
	freopen("arbint.out","w",stdout);
	int n,m,x;
	fin>>n>>m;
	for(int i=1; i<=n; ++i)
	{
		fin>>x;
		poz=i;
		val=x;
		adauga(1,1,n);
		//afis(n);
	}
	for(int i=1; i<=m; ++i)
	{
		fin>>x>>a>>b;
		if(x==0)
		{
			maxim=0;
			detmax(1,1,n);
			printf("%d\n", maxim);
		}
		else 
			{
				poz=a;
				val=b;
				adauga(1,1,n);
			}
	}
	return 0;
}