Cod sursa(job #2767967)

Utilizator bubblegumixUdrea Robert bubblegumix Data 8 august 2021 18:51:26
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include<iostream>
#include<vector>
#include<fstream>
#define MAXN 100010
using namespace std;
int v[MAXN];
int tree[4 * MAXN];
int n, m;

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


void updateTree(int idx, int l, int r, int pos, int val)
{
	if (l==r)
	{
		tree[idx] = val;
		return;
	}
	int m = (l + r) / 2;
	if (pos <= m)
		updateTree(2 * idx, l, m, pos, val);
	else
		updateTree(2 * idx + 1, m + 1, r, pos, val);
	tree[idx] = max(tree[2 * idx], tree[2 * idx + 1]);
}
int query(int idx, int l, int r, int ql, int qr)
{
	if (l > qr || r < ql)
		return -10;
	if (l >= ql && r <= qr)
		return tree[idx];
	int m = (l + r) / 2;
	return max(query(2 * idx, l, m, ql, qr), query(2 * idx + 1, m + 1, r, ql, qr));
}

int main()
{
	ios_base::sync_with_stdio(false);
	f.tie(0);


	f >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		f >> v[i];
		updateTree(1, 1, n, i, v[i]);
	}
	while (m--)
	{
		int op, a, b;
		f >> op >> a >> b;
		if (op == 1)
			updateTree(1, 1, n, a, b);
		else
			g << query(1, 1, n, a, b) << '\n';
		
	}

}