Cod sursa(job #699267)

Utilizator dicu_dariaDaria Dicu dicu_daria Data 29 februarie 2012 18:31:27
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#define MAXN 100010
using namespace std;
int a,b,n,arb[MAXN],val,t,maxim;
void query(int nod,int l,int r)
{
	if(a<=l and b>=r)
	{
		if(maxim<arb[nod]) maxim=arb[nod];
		return;
	}
	int m=(l+r)/2;
	if(a<=m) query(2*nod,l,m);
	if(b>m) query(2*nod+1,m+1,r);
}
void update(int nod,int l,int r)
{
	if(l==r) 
	{
		arb[nod]=val;
		return;
	}
	int m=(l+r)/2;
	if(a<=m) update(2*nod,l,m);
	if(a>m) update(2*nod+1,m+1,r);
	arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
int main()
{
	int m;
	ifstream fi("arbint.in");
	ofstream fo("arbint.out");
	fi>>n>>m;
	for(int i=1;i<=n;i++) 
	{
		fi>>val; a=i;
		update(1,1,n);
		
	}
	while(m--)
	{
		fi>>t>>a>>b;
		if(t==0)
		{
			maxim=-int(2e9);
			query(1,1,n);
			fo<<maxim<<"\n";
		}
		else
		{
			val=b;
			update(1,1,n);
		}
	}
}