Cod sursa(job #1355463)

Utilizator mateidanutDanut Gabriel Matei mateidanut Data 22 februarie 2015 18:53:28
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
using namespace std;

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

int v[262144], i, n, m, x, poz, k, s, d, maxi;

void Update(int nod, int st, int dr)
{	if (st==dr) v[nod]=x;
	else
	{	int m=(st+dr)/2;
		if (poz<=m) Update(2*nod, st, m);
		else Update(2*nod+1, m+1, dr);
		v[nod]=max(v[2*nod], v[2*nod+1]);
	}
}

void Querry(int nod, int st, int dr)
{	if (s<=st && dr<=d) maxi=max(maxi, v[nod]);
	else
	{	int m=(st+dr)/2;
		if (s<=m) Querry(2*nod, st, m);
		if (d>m) Querry(2*nod+1, m+1, dr);
	}
}

int main()
{	f>>n>>m;
	for (i=1; i<=n; ++i)
	{	f>>x;
		poz=i;
		Update(1, 1, n);
	}
	for (i=1; i<=m; ++i)
	{	f>>k;
		if (k==1)
		{	f>>poz>>x;
			Update(1, 1, n);
		}
		else
		{	f>>s>>d;
			maxi=0;
			Querry(1, 1, n);
			g<<maxi<<'\n';
		}
	}
    return 0;
}