Cod sursa(job #2312010)

Utilizator richard26Francu Richard richard26 Data 3 ianuarie 2019 23:32:30
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

int arb[400005];
void update(int nod, int st, int dr, int i, int val)
{
	if (st == dr)
	{
		arb[nod] = val;
		return;
	}
	int mij = (st + dr) / 2;
	if(i <= mij)
		update(2 * nod, st, mij, i, val);
	else update(2 * nod + 1, mij + 1, dr, i, val);

	arb[nod] = max(arb[2 * nod], arb[2 * nod + 1]);
}

void query(int nod, int st, int dr, int a, int b, int &maxim)
{
	if (a <= st && b >= dr)
	{
		maxim = max (arb[nod], maxim);
		return;
	}
	int mij = (st + dr) / 2;
	if(a <= mij) query(nod * 2, st, mij, a, b, maxim);
	if(b >= mij + 1) query(nod * 2 + 1, mij + 1, dr, a, b, maxim);
} 
int main()
{	
	ifstream f("arbint.in");
	ofstream g("arbint.out");
	int n, m, maxim, x, y, z;
	int i;
	f>>n>>m;
	for (i = 1; i <= n; i++)
	{
		f>>x;
		update(1, 1, n, i, x);
	}

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