Cod sursa(job #990706)

Utilizator Anca_PaneaPanea Anca Anca_Panea Data 28 august 2013 22:17:06
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
using namespace std;
#include<fstream>
#include<algorithm>
#include<cmath>
ifstream eu("arbint.in");
ofstream tu("arbint.out");
#define Nmax 100002
int IT[4*Nmax];
int N,M,poz,val;
void Update(int nod,int L,int R,int P,int V)
{
	int Mid=(L+R)/2;
	if(L==R)
	{
		IT[nod]=V;
		return;
	}
	if(P<=Mid)
		Update(2*nod,L,Mid,P,V);
	else
		Update(2*nod+1,Mid+1,R,P,V);
	IT[nod]=max(IT[2*nod],IT[2*nod+1]);
}
int Query(int nod,int L,int R,int QL,int QR)
{
	int Mid=(L+R)/2;
	if(QL<=L&&R<=QR)
		return IT[nod];
	int QMax=-1;
		if(QL<=Mid)
			QMax=max(QMax,Query(2*nod,L,Mid,QL,QR));
		if(QR>Mid)
			QMax=max(QMax,Query(2*nod+1,Mid+1,R,QL,QR));
		return QMax;
}
 int main()
 {
	int op,a,b;
	eu>>N>>M;
	for(poz=1;poz<=N;poz++)
	{
		eu>>val;
		Update(1,1,N,poz,val);
	}
	while(M--)
	{
		eu>>op>>a>>b;
		if(op==0)
			tu<<Query(1,1,N,a,b)<<"\n";
		if(op==1)
			Update(1,1,N,a,b);
	}
	return 0;
 }