Cod sursa(job #659748)

Utilizator lily3Moldovan Liliana lily3 Data 10 ianuarie 2012 22:27:16
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>
#include<algorithm>
using namespace std;

long i,j,n,m,tip,a1,a2,x;
long mij;
long a[600010];
void schimba(int nod,int st,int dr,int poz,int val)
{
	if(st==dr)
		a[nod]=val;
	else
	{
	mij=(st+dr)/2;
	if(poz<=mij)
	schimba(nod*2,st,mij,poz,val);
	if(mij<poz)
		schimba(nod*2+1,mij+1,dr,poz,val);
	a[nod]=max(a[nod*2],a[nod*2+1]);
	}
}
void detmax(int nod,int st,int dr,int a1,int b)
{
	if(a1<=st&&b>=dr)
	{
		if(a[nod]>x)
			x=a[nod];
	}
	if(st<dr)
	{
		mij=(st+dr)/2;
		if(a1<=mij)
			detmax(nod*2,st,mij,a1,b);
		if(mij<b)
			detmax(nod*2+1,mij+1,dr,a1,b);
	}
}
int main()
{
	FILE *f=fopen("arbint.in","r");
	FILE *g=fopen("arbint.out","w");
	fscanf(f,"%ld%ld",&n,&m);
	a[0]=0;
	for(i=1;i<=n;++i)
	{
		fscanf(f,"%ld",&x);
		schimba(1,1,n,i,x);
	}
	for(i=1;i<=m;++i)
	{
		fscanf(f,"%ld%ld%ld",&tip,&a1,&a2);
		if(tip==1)
			schimba(1,1,n,a1,a2);
		else
		{
			x=0;
			detmax(1,1,n,a1,a2);
			fprintf(g,"%ld\n",x);
		}
	}
	return 0;
}