Cod sursa(job #2585974)

Utilizator CyborgSquirrelJardan Andrei CyborgSquirrel Data 19 martie 2020 16:03:26
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, m;
int tre[400041];
void update(int p, int v, int cp = 1, int lt = 1, int rt = n){
	if(lt == rt){
		tre[cp] = v;
	}else{
		int mid = (lt+rt)/2;
		if(p <= mid){
			update(p, v, 2*cp, lt, mid);
		}else{
			update(p, v, 2*cp+1, mid+1, rt);
		}
		tre[cp] = max(tre[cp*2], tre[cp*2+1]);
	}
}

int query(int clt, int crt, int cp = 1, int lt = 1, int rt = n){
	if(lt == clt && rt == crt){
		return tre[cp];
	}else{
		int mid = (lt+rt)/2;
		if(clt < mid && crt <= mid){
			return query(clt, crt, 2*cp, lt, mid);
		}else if(clt <= mid){
			return max(query(clt, mid, 2*cp, lt, mid), query(mid+1, crt, 2*cp+1, mid+1, rt));
		}else{
			return query(clt, crt, 2*cp+1, mid+1, rt);
		}
	}
}

void read(){
	fin >> n >> m;
	for(int i = 1; i <= n; ++i){
		int a;fin >> a;
		update(i, a);
	}
}

int main(){
	read();
	for(int i = 0; i < m; ++i){
		int op, a, b;
		fin >> op >> a >> b;
		if(op == 0){
			fout << query(a, b) << "\n";
		}else{
			update(a, b);
		}
	}
	return 0;
}