Cod sursa(job #563436)

Utilizator bacilaBacila Emilian bacila Data 25 martie 2011 09:26:29
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<fstream>
using namespace std;
int v[500003],n,m,maxim,poz,x,s,d;
int max(int z, int y)
{
	if(z>y) return z;
	return y;
	
	}
void update(int nod,int st,int dr)
{
	if(st==dr){
		v[nod]=x;
		return;}
	else{
	if(poz<=(st+dr)/2) update(2*nod,st,(st+dr)/2);
	else
	 update(2*nod+1,(st+dr)/2+1,dr);
	 v[nod]=max(v[nod*2],v[nod*2+1]);
}}
void query(int nod,int st,int dr)
{	
	if(s<=st&&dr<=d){
	maxim=max(maxim,v[nod]);
	return;}
	if(s<=(st+dr)/2) query(2*nod,st,(st+dr)/2);
	if((st+dr)/2<d) query(2*nod+1,(st+dr)/2+1,dr);
}
int main()
{int i,c;
	ifstream f("arbint.in");
f>>n>>m;
for(i=1;i<=n;i++)
{f>>x; poz=i;
update(1,1,n);
}

ofstream g("arbint.out");
for(i=1;i<=m;i++)
{f>>c;
if(!c)
{f>>s>>d; 
query(1,1,n);
g<<maxim<<'\n';
maxim=0;}
else{
f>>poz>>x;
update(1,1,n);}
}
    
f.close();
g.close();	
return 0;
}