Cod sursa(job #1496858)

Utilizator AlexandraaaaMereu Alexandra Alexandraaaa Data 5 octombrie 2015 17:58:42
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define maxN 100020*4

using namespace std;

int A[maxN];

void update(int l, int r, int poz,int i, int v){
	if (l == r){
		A[i] = v;
	}
	else {
		int m = (l + r) / 2;

		if (m >= poz)
			update(l, m, poz, i * 2, v);
		else
			update(m + 1, r, poz, i * 2 + 1, v);

		A[i] = max(A[i*2],A[i*2+1]);
	}
}

void vezi(int l, int r,int a, int b, int i, int &M){
	if (a <= l && r <= b){
		if (A[i] > M) M = A[i];
	}
	else{
		int m = (l + r) / 2;
		if (m >= a)vezi(l, m, a, b, i * 2, M);
		if (m < b)vezi(m + 1, r, a, b, i * 2 + 1, M);
	}
}

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

	int n, m;

	f >> n >> m;
	for (int i = 1; i <= n; ++i) {
		int x;
		f >> x;
		update(1, n, i, 1, x);
	}

	for (int i = 0; i < m; ++i){
		int x, y, z;
		f >> x >> y >> z;
		if (x == 0){
			int m = 0;
			vezi(1, n, y, z, 1, m);
			g << m << "\n";
		}
		else
			update(1, n, y, 1, z);
	}

	f.close();
	g.close();

	return 0;
}