Cod sursa(job #2007365)

Utilizator WebDesignbyTMGhiorghiu Ioan-Viorel WebDesignbyTM Data 2 august 2017 16:27:07
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#define DM 100005
#include <fstream>
using namespace std;

ifstream fi ("arbint.in");
ofstream fo ("arbint.out");
int n, v[DM], sgt[4*DM], a, b, m, c;

void update(int nod, int st, int dr, int pos, int val)
{
	if (st == dr)
	{
    sgt[nod] = val;
    return;
  }
	int mid = (st + dr)/2, nods = nod*2;
	if (pos > mid)
		update(nods + 1, mid + 1, dr, pos, val);
	else
		update(nods, st, mid, pos, val);
	sgt[nod] = max(sgt[nods], sgt[nods+1]);
}

int get_max(int nod, int st, int dr, int a, int b)
{
	if (st >= a && dr <= b)
		return sgt[nod];
	if (st > b || dr < a)
		return 0;
	int mid = (dr + st)/2, nods = nod*2;
	return max(get_max(nods, st, mid, a, b), get_max(nods + 1, mid + 1, dr, a, b));
}

int main()
{
	fi >> n >> m;
	for (int i = 1; i <= n; ++i)
	{
		fi >> v[i];
		update(1, 1, n, i, v[i]);
	}
	for (int i = 1; i <= m; ++i)
	{
		fi >> c >> a >> b;
		if (!c)
			fo << get_max(1, 1, n, a, b) << '\n';
		else
			update(1, 1, n, a, b);
	}
	return 0;
}