Cod sursa(job #2760194)

Utilizator Tudor_StefanaStefana Tudor Tudor_Stefana Data 23 iunie 2021 19:16:19
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1e5 + 10;

int aint[MAXN<<2];

void update(int node, int st, int dr, int poz, int val) {
	if(st == dr) {
		aint[node] = val;
		return;
	}

	int mid = st + dr >> 1;
	if(poz <= mid) update(node<<1, st, mid, poz, val);
	else update(node<<1|1, mid + 1, dr, poz, val);

	aint[node] = max(aint[node<<1], aint[node<<1|1]);
}

int query(int node, int st, int dr, int a, int b) {
	if(st >= a && dr <= b) return aint[node];

	int mid = st + dr >> 1;
	int ret = 0;
	if(a <= mid) ret = query(node<<1, st, mid, a, b);
	if(b > mid) ret = max(ret, query(node<<1|1, mid + 1, dr , a, b));

	return ret;
}


int main()
{
    ifstream fin("arbint.in");
    ofstream fout("arbint.out");
	int n;
	fin >> n;
	int m;
	fin >> m;

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

	while(m--) {
		int a, b, c;
		fin >> a >> b >> c;
		if(a == 1) {
			update(1, 1, n, b, c);
		} else {
			fout << query(1, 1, n, b, c) << '\n';
		}
	}
	return 0;
}