Cod sursa(job #832801)

Utilizator krissu93FMI Tiugan Cristiana Elena krissu93 Data 11 decembrie 2012 15:14:44
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <iostream>
using namespace std;

int arb[400000];
int n,m,val,pos,a,b;
int l,r;
int max1;
ifstream in("arbint.in");
ofstream out("arbint.out");

int maxim(int a, int b)
{
	if (a>b) return a;
	else return b;
}

void actualizeaza(int st, int dr, int nod)
{
	if (st==dr)
	{
		arb[nod]=val;
	return;
	}
	else
	{
		int mij=(st+dr)/2;
		if (pos<=mij) 
			actualizeaza(st,mij,2*nod);
		else
			actualizeaza(mij+1,dr,2*nod+1);
		arb[nod]=maxim(arb[2*nod],arb[2*nod+1]);
	}
}

void intreaba(int st, int dr, int nod)
{
	if ( (l<=st) && (dr<=r) ) 
	{
		if (max1<arb[nod]) max1=arb[nod];
		return  ;
	}
	else
	{
	int mij=(st+dr)/2;
	if (l<=mij)
		intreaba(st,mij,2*nod);
	if (r>mij)
		intreaba(mij+1,dr,2*nod+1);
	}
}

int main()
{
	in>>n;
	in>>m;
	int i;
	for (i=1;i<=n;i++)
	{
		in>>val;
		pos=i;
		actualizeaza(1,n,1);
	}
	int t;
	while (m)
	{
		in>>t>>a>>b;
		if (t!=0)
		{
			pos=a;
			val=b;
			actualizeaza(1,n,1);
			/*for (i=1;i<=n;i++) out<<arb[i]<<' ';
			out<<'\n';*/
		}
		else
		{	max1=-1;
			l=a;
			r=b;
			intreaba(1,n,1);
			out<<max1<<"\n";
		}
		m--;
	}
	return 0;
	
}