Cod sursa(job #1807429)

Utilizator flibiaVisanu Cristian flibia Data 16 noiembrie 2016 16:34:19
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, m, aux, idx, val, arb[100005], mid, l, r, check;

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

int qr(int st, int dr, int pos)
{
	if(l <= st && dr <= r)
	{
		return arb[pos];
	}
	int a = 0, b = 0, mid = (st+dr)/2;
	if(l <= mid) a = qr(st, mid, pos*2);
	if(r > mid) b = qr(mid+1, dr, pos*2+1);
	return max(a, b);
	 
}

int main()
{
	in >> n >> m;
	for(int i = 1; i <= n; i++) 
	{
		in >> aux;
		idx = i;
		val = aux;
		update(1,n,1);
	}
	for(int i = 1; i <= m; i++)
	{
		in >> check >> l >> r;
		if(!check) out << qr(1, n, 1) << '\n';
		else 
		{
			idx = l;
			val = r;
			update(1,n,1);
		}
	}
	return 0;
}