Pagini recente » Cod sursa (job #3124282) | Cod sursa (job #2962926) | Cod sursa (job #1638584) | Cod sursa (job #2918207) | Cod sursa (job #2952047)
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int arbore[500005] , n , m;
int left , right , start , finish , maxim , op , pos , val ;
int Maxim(int a, int b)
{
if ( a > b ) return a;
return b;
}
void update( int nod , int left , int right)
{
if ( left == right )
{
arbore[nod] = val;
return;
}
int mid = (left + right) / 2;
if(pos <= mid)
update(2 * nod , left , mid);
else
update(2 * nod + 1 , mid + 1 , right);
arbore[nod] = Maxim( arbore[2 * nod] , arbore[2 * nod + 1]);
}
void query (int nod , int left , int right)
{
if( start <= left && right <= finish)
{
if(maxim < arbore[nod])
maxim = arbore[nod];
return;
}
int mid = (left + right) / 2;
if( start <= mid)
query(2 * nod , left , mid);
if(mid < finish)
query(2 * nod + 1 , mid + 1 , right);
}
int main()
{
int x , a , b;
f >> n >> m;
for ( int i = 1 ; i <= n ; i++)
{
f >> x;
pos = i;
val = x;
update(1 , 1 , n);
}
for (int i = 1 ; i <= m ; i++)
{
f >> op >> a >> b;
if( op == 0)
{
maxim = -1;
start = a;
finish = b;
query(1 , 1 , n);
g << maxim << '\n';
}
else
{
pos = a;
val = b;
update(1 , 1 , n);
}
}
}