Cod sursa(job #1152033)

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

using namespace std;

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

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

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)>>1;
	if (a<=mid)
		qs=query(nod<<1,st,mid);
	if (b>mid)
		qd=query((nod<<1)+1,mid+1,dr);
	
	return max(qs,qd);
}

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

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