Cod sursa(job #1528090)

Utilizator glbglGeorgiana bgl glbgl Data 19 noiembrie 2015 01:10:34
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>


#define MAX 262144

using namespace std;


int a, b, maximum, arbInt[MAX], dim;



void searchMax(int node, int left, int right){

	if(a <= left && right <= b){
		maximum = max(maximum, arbInt[node]);
		return;
	}

	int mid = (left+right)/2;

	if(a <= mid) searchMax(2*node, left, mid);
	if(b > mid) searchMax(2*node+1, mid+1, right);
}


void replaceValue(int node, int left, int right){

	if(left == right){
		arbInt[node] = b;
		return;
	}

	int mid = (left+right)/2;

	if(a <= mid) replaceValue(2*node, left, mid);
	else replaceValue(2*node+1, mid+1, right);

	arbInt[node] = max(arbInt[2*node], arbInt[2*node+1]);
}


void IntervalTree(){

	freopen("arbint.in","r",stdin);
	freopen("arbint.out","w",stdout);

	int N, M, op;

	scanf("%d%d", &N, &M);

	//dim = 2*N-1;

	for(a = 1; a <= N; ++a){
		scanf("%d", &b);
		replaceValue(1, 1, N);
	}



	for(int i = 1; i <= M; ++i){
		scanf("%d%d%d", &op, &a, &b);
		if(op == 0){
			maximum = -1;
			searchMax(1, 1, N);
			printf("%d\n", maximum);
		}
		else{
			replaceValue(1, 1, N);
		}
	}
}

int main(){

	IntervalTree();
	return 0;
}