Cod sursa(job #870589)

Utilizator mihai27Mihai Popescu mihai27 Data 3 februarie 2013 17:49:53
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<fstream>

using namespace std;

ifstream in("arbint.in");
ofstream out("arbint.out");

int t,rez,y,z,i,n,x,AI[200001];

void insert(int nod,int st,int dr,int poz,int val)
{
	int m=(st+dr)/2;
	
	if (st==dr)
	{
		AI[nod]=val;
		return;
	}
	
	if (poz<=m) insert(nod*2,st,m,poz,val);
		else insert(nod*2+1,m+1,dr,poz,val);
	
	AI[nod]=max(AI[nod*2],AI[nod*2+1]);
}

void query(int nod,int st,int dr,int a,int b)
{
	int m=(st+dr)/2;
	
	if (a<=st && dr<=b)
	{
		rez=max(rez,AI[nod]);
		return;
	}
	if (a<=m) query(nod*2,st,m,a,b);
	if (b>m) query(nod*2+1,m+1,dr,a,b);
}

int main()
{
	in>>n>>t;
	
	for (i=1;i<=n;i++)
	{
		in>>x;
		insert(1,1,n,i,x);
	}
	
	for (i=1;i<=t;i++)
	{
		in>>x>>y>>z;
		if (x==0) 
		{
			rez=0;
			query(1,1,n,y,z);
			out<<rez<<'\n';
		}
		else insert(1,1,n,y,z);
	}
}