Cod sursa(job #1980835)

Utilizator StefanMudragMudrag Stefan StefanMudrag Data 14 mai 2017 09:04:44
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<iostream>
#include<fstream>
#define NMAX 100001
using namespace std;

int n, m;
int arb[4*NMAX];
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int val;
int maxim;

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

	arb[nod] = (arb[2 * nod] > arb[2 * nod + 1]) ? arb[2 * nod] : arb[2 * nod + 1];

}
void query(int nod, int st, int dr, int a, int b)
{
	if (a <= st && dr <= b)
	{
		if ( maxim < arb[nod] )
			maxim = arb[nod];
		return;
	}

	int mij = (dr + st) / 2;
	if (a <= mij) query(2 * nod, st, mij, a, b);
	if (b > mij) query(2 * nod + 1, mij + 1, dr, a, b);

}
int main()
{
	fin >> n >> m;

	int op,x,y;
	for (int i = 1; i <= n; ++i)
	{
		fin >> val;
		update(1, 1, n, i);
	}
	for (int i = 1; i <= m; ++i)
	{
		fin >> op >> x >> y;
		if (op == 1)
		{
			val = y;
			update(1, 1, n, x);
		}
		else
		{
			maxim = -1;
			query(1, 1, n, x, y);
			fout << maxim << '\n';
		}

	}

}