Cod sursa(job #407451)

Utilizator dexter_dexMutascu Adrian - Dragos dexter_dex Data 2 martie 2010 12:47:54
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

#define Nmax 100005

int arb[Nmax<<2];
int i, n, nr, s, d, val, poz, q, a, b, sol;

void update(int nod, int s, int d){
	
	if (s == d){
		arb[nod] = val;
		return ;
	}
	
	int m = (s+d)/2;
	
	if (poz <= m) 
		update(2*nod, s, m);
	else 
		update(2*nod+1, m+1, d);
	
	arb[nod] = max (arb[2*nod], arb[2*nod+1]);
	
}

void query(int nod, int s, int d){
	if (a <= s && d <= b){
		sol = max(sol,arb[nod]);
		return ;
	}
	
	int m = (s+d)/2;
	
	if (a <= m)
		query (2*nod, s, m);
	if (m < b)
		query (2*nod+1, m+1, d);
}

int main (){
	FILE * f = fopen ("arbint.in", "r");
	FILE * g = fopen ("arbint.out", "w");
	
	fscanf(f, "%d %d", &n, &nr);
	
	for (i = 1 ; i <= n ; i++){
		poz = i;
		fscanf (f, "%d", &val);
		update(1,1,n);
	}
	
	for (i = 1 ; i <= nr; i++){
		fscanf(f, "%d %d %d", &q, &a, &b);
		if (q == 0){
			sol = 0;
			query(1,1,n);
			fprintf(g, "%d\n", sol);
		}
	
		if (q == 1){
			poz = a;
			val = b;
			update(1,1,n);
		}
		
	}
	
	
	fclose(f);
	fclose(g);	
	return 0;
}