Cod sursa(job #1096102)

Utilizator federerUAIC-Padurariu-Cristian federer Data 1 februarie 2014 15:40:08
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.07 kb
#include<fstream>
#include<algorithm>
#define max(a, b) (a<b?b:a)
#define Nmax 100010
using namespace std;

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

int i, N, M, A[4*Nmax],a, b, sol, max=-1;
int poz, x;

void UPDATE(int st, int dr, int nod)
{
	if (st == dr)
		A[nod] = x;
	else
	{
		int mijl = (st + dr) / 2;
		if (poz <= mijl)
			UPDATE(st, mijl, nod * 2);
		else
			UPDATE(mijl + 1, dr, nod * 2 + 1);
		A[nod] = max(A[2 * nod], A[2 * nod + 1]);
	}
}
void QUERY(int st, int dr, int nod)
{
	if (a <= st && b >= dr)
		sol = max(sol, A[nod]);
	else
	{
		int mijl = (st + dr) / 2;
		if (a <= mijl)
			QUERY(st, mijl, nod*2);
		if (b >= mijl + 1)
			QUERY(mijl + 1, dr, nod * 2 + 1);
	}
}
int main()
{
	int op;
	fin >> N >> M;
	for (i = 1; i <= N; i++)
	{
		fin >> x;
		poz = i;
		UPDATE(1, N, 1);
	}
	while (M--)
	{
		fin>>op>>a>>b;
		if (!op){
			sol = -1;
			QUERY(1, N, 1);
			fout<< sol << '\n';
		}
		else
		{
			poz = a;
			x = b;
			UPDATE(1, N, 1);
		}
	}
	return 0;
}/*
#include <iostream>
#include <fstream>
#define max(a, b) (a<b?b:a)
using namespace std;
int  A[100014 * 4 + 1], n, m, a, b, x, poz, sol;
void update(int st, int dr, int nod)
{
	if (st == dr)
		A[nod] = x;
	else
	{
		int mij = (st + dr) / 2;
		if (poz <= mij)
			update(st, mij, nod * 2);
		else
			update(mij + 1, dr, nod * 2 + 1);
		A[nod] = max(A[2 * nod], A[2 * nod + 1]);
	}
}
void query(int st, int dr, int nod)
{
	if (a <= st && b >= dr)
		sol = max(sol, A[nod]);
	else
	{
		int mij = (st + dr) / 2;
		if (a <= mij)
			query(st, mij, nod * 2);
		if (b >= mij + 1)
			query(mij + 1, dr, nod * 2 + 1);
	}
}
int main()
{
	int i, var;
	fstream f, g;
	f.open("arbint.in", ios::in);
	g.open("arbint.out", ios::out);
	f >> n >> m;
	for (i = 1; i <= n; i++)
	{
		f >> x;
		poz = i;
		update(1, n, 1);
	}
	for (i = 1; i <= m; i++)
	{
		f >> var >> a >> b;
		if (var == 0)
		{
			sol = -1;
			query(1, n, 1);
			g << sol << '\n';
		}
		else
		{
			poz = a;
			x = b;
			update(1, n, 1);
		}
	}
	return 0;
}*/