Cod sursa(job #1200950)

Utilizator tudi98Cozma Tudor tudi98 Data 23 iunie 2014 22:58:29
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
using namespace std;
#define dim 100005

int Max_tree[dim*4];
int X,poz,ans,a,b;

inline int max(int a,int b){
	return (a>b?a:b);
}

void update(int k,int l,int r){
	if(l==r){
		Max_tree[k]=X;	
		return;	
	}
	int mid=(l+r)/2;
	if(poz<=mid) update(k*2,l,mid);
	else update(k*2+1,mid+1,r);
	Max_tree[k]=max(Max_tree[k*2],Max_tree[k*2+1]);
}

void query(int k,int l,int r){
	if(a<=l && b>=r){
		if(ans < Max_tree[k]) ans=Max_tree[k];
		return;
	}
	int mid=(l+r)/2;
	if(a<=mid) query(k*2,l,mid);
	if(b>mid) query(k*2+1,mid+1,r);
}

int main(){

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

	int n,m;
	bool p;
	f >> n >> m;
	for(int i=1;i<=n;i++){
		f >> X,poz=i;
		update(1,1,n);
	}
	while(m--){
		f >> p >> a >> b;
		if(p){
			poz=a,X=b;
			update(1,1,n);
		}
		else{
			ans=0;
			query(1,1,n);
			g << ans << "\n";	
		}
	}
}