Cod sursa(job #1152006)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 24 martie 2014 15:07:25
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

int n,m,i,x,v[1000005];
int a,b,q;

int query (int nod,int st, int dr) {
	
	int qs=-1,qd=-1;
	if (a<=st && b>=dr) 
		return v[nod];
	int mid=(st+dr)/2;
	if (a<=mid)
		qs=query(2*nod,st,mid);
	if (b>mid)
		qd=query(2*nod+1,mid+1,dr);
	
	return max(qs,qd);
}

void update (int nod, int st, int dr, int poz, int b) {
	
	if (st==dr && st==poz) {
		v[nod]=b;
		return;
	}
	int mid=(st+dr)/2;
	if (poz<=mid)
		update(2*nod,st,mid,poz,b);
	else 
		if (poz>mid)
			update(2*nod+1,mid+1,dr,poz,b);
	v[nod]=max(v[2*nod],v[2*nod+1]);
}

int main () {
	
	fin>>n>>q;
	for (i=1;i<=n;i++) {
		fin>>x;
		update(1,1,n,i,x);
	}
	while (q--) {
		fin>>x>>a>>b;
		if (x==0) 
			fout<<query(1,1,n)<<"\n";
		else 
			update(1,1,n,a,b);
	}
	
	return 0;
}