Pagini recente » Cod sursa (job #2877203) | Cod sursa (job #1523651) | Cod sursa (job #2905910) | Cod sursa (job #426234) | Cod sursa (job #1618975)
#include <fstream>
#include <vector>
using namespace std;
ifstream is("arbint.in");
ofstream os("arbint.out");
using VI = vector<int>;
int n, m, N;
VI arb;
void read();
void query();
int main()
{
read();
query();
is.close();
os.close();
return 0;
}
void query()
{
int tip, a, b, s;
while ( m-- )
{
is >> tip >> a >> b;
a += N - 1;
if ( !tip )
{
b += N - 1;
s = 0;
while ( a <= b )
{
s = max(s, max(arb[a], arb[b]));
a = ( a + 1 ) / 2;
b = ( b - 1 ) / 2;
}
os << s << "\n";
}
else
{
arb[a] = b;
a /= 2;
while ( a )
{
arb[a] = max(arb[2 * a], arb[2 * a + 1]);
a /= 2;
}
}
}
}
void read()
{
is >> n >> m;
for ( N = 1; N <= n; N <<= 1 );
arb = VI(2 * N);
for ( int i = 1; i <= n; ++i )
is >> arb[N + i - 1];
for ( int i = N - 1; i; --i )
arb[i] = max(arb[2 * i], arb[2 * i + 1]);
}