Cod sursa(job #855184)

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