Pagini recente » Cod sursa (job #1101588) | Cod sursa (job #2566130) | Cod sursa (job #1139485) | Cod sursa (job #588039) | Cod sursa (job #2753236)
#include <fstream>
#include<iostream>
using namespace std;
#define dim 100001
ifstream f("arbint.in");
ofstream g("arbint.out");
int N, M;
int Arb[4*dim+66];
int start, finish, a, b, maxim;
void intermaxim(int i, int L, int R, int &maxim)
{
if ( start <= L && finish >= R )
{
if ( maxim < Arb[i] ) maxim = Arb[i];
}
int aux = (L+R)/2;
if ( start <= aux ) intermaxim(2*i,L,aux,maxim);
if ( aux < finish ) intermaxim(2*i+1,aux+1,R,maxim);
}
inline int Maxim(int x, int y) {
if ( x > y ) return x;
return y;
}
void schimbare(int i, int L, int R)
{
if ( L == R)
Arb[i] = b;
int aux = (L+R)/2;
if ( a <= aux )
schimbare(2*i,L,aux);
else
schimbare(2*i+1,aux+1,R);
Arb[i] = Maxim( Arb[2*i], Arb[2*i+1] );
}
int main()
{
int X, A, B,j;
f>>N>>M;
for ( j= 1; j<= N; ++j)
{ f>>X;
a = j; b = X;
schimbare(1,1,N);
}
for ( j = 1; j <= M; ++j)
{ f>>X;
if ( X == 0 )
{ f>>A>>B;
maxim = -1;
start = A, finish = B;
intermaxim(1,1,N,maxim);
g<<maxim<<endl;
}
else
{
a = A, b = B;
schimbare(1,1,N);
}
}
}