Cod sursa(job #855233)

Utilizator GrimpowRadu Andrei Grimpow Data 14 ianuarie 2013 19:52:39
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
int poz,maxim,val,finish,start,i;
int Arb[400500];
void update(int left,int right,int nod)
{
	if(left==right)
	{
		Arb[nod]=val;
		return;
	}
	int mij=(left+right)/2;
	if(poz<=mij) update(left,mij,nod*2);
	else update(mij+1,right,nod*2+1);
	if(Arb[nod*2]>Arb[nod*2+1])
		Arb[nod]=Arb[nod*2];
	else Arb[nod]=Arb[nod*2+1];
}

void query(int left,int right,int nod)
{
	if(start <= left && right <= finish)
	{
		if(maxim<Arb[nod]) maxim=Arb[nod];
		return;
	}
	int mij=(left+right)/2;
	if(start<=mij) query(left,mij,nod*2);
	if(mij<finish) query(mij+1,right,nod*2+1);
}


int main()
{
	int j,n,m,z,x,c;
	ifstream f("arbint.in");
	ofstream g("arbint.out");
	f>>n>>m;
	for(i=0;i<n;++i)
	{
		f>>val;
		poz=i+1;
		update(1,n,1);
	}
	for(i=0;i<m;++i)
	{
		f>>z>>x>>c;
		/*if(i==2)
			for(j=1;j<20;++j)
				cout<<Arb[j]<<' ';
		*/
		if(z==0)
		{
			maxim=-1;
			start=x;
			finish=c;
			query(1,n,1);
			g<<maxim<<'\n';
		}
		else
		{
			poz=x;
			val=c;
			update(1,n,1);
		}
	}
	return 0;	
}