Cod sursa(job #2423938)

Utilizator ctrohinCristina Trohin ctrohin Data 22 mai 2019 11:15:47
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <iostream>
#define nmax 100001
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
 
int arb[5*nmax],n,rez;
 
int maxim(int a,int b)
{
	if(a>b) return a;
	else return b;
}
 
void change(int p, int v, int s, int d, int c) 
{
	if(s==d) { arb[c]=v; return; }
	if(p<s || d<p) return;
	
	int m=(s+d)/2;
	if(p<=m) change(p,v,s,m,2*c);
	else change(p,v,m+1,d,2*c+1);
	
	arb[c]=maxim(arb[2*c],arb[2*c+1]);
}
 
void query(int a,int b, int s, int d, int c) 
{
	
	if( a<=s && d<=b ) 
	{
		if(arb[c]>rez) rez=arb[c];
		return;
	}
	
	int m=(s+d)/2;
	if(a<=m) query(a,b,s,m,2*c);
	if(b>m) query(a,b,m+1,d,2*c+1);
}
 
 
int main()
{
	int m,i,x,a,b;
	fin>>n>>m;
	for(i=1;i<=n;i++)
	{
		fin>>x;
		change(i,x,1,n,1);
	}
	for(i=1;i<=m;i++)
	{
		fin>>x; fin>>a>>b;
		if(!x)
		{
			rez=-1;
			query(a,b,1,n,1);
			fout<<rez;
		}
		else change(a,b,1,n,1);
	}
 
}