Pagini recente » Cod sursa (job #2210043) | Cod sursa (job #143351) | Cod sursa (job #3241366) | Cod sursa (job #1710997) | Cod sursa (job #2360714)
#include <bits/stdc++.h>
using namespace std;
int a,b,pos,val,cer;
int N , M , T[1<<20];
ifstream f ("arbint.in") ;
ofstream g ("arbint.out") ;
void update(int nod , int st , int dr);
int querry(int nod , int st , int dr) ;
void update (int nod , int st , int dr)
{
if (st == dr) T[nod] = val ;
else
{
int mij = (st+dr)/2;
if (pos <= mij) update(nod*2,st,mij) ;
else update(nod*2+1,mij+1,dr) ;
T[nod] = max(T[nod*2] , T[nod*2+1]) ;
}
}
int querry (int nod , int st , int dr)
{
int mij ;
int x1 = 0 , x2 = 0 ;
if (a <= st && b >= dr) return T[nod];
else
{
int mij = ( st + dr ) / 2;
if (a <= mij) x1 = querry(nod*2,st,mij) ;
if (b >= mij + 1) x2 = querry(nod*2+1,mij+1,dr);
return max ( x1 , x2 ) ;
}
}
int main()
{
f >> N >> M ;
for (int i = 1 ; i <= N ; ++i)
{
f >> val ;
pos = i ;
update(1,1,N);
}
for (int i = 1 ; i <= M ; ++i)
{
f >> cer >> a >> b;
if (cer == 1)
{
pos = a;
val = b;
update(1,1,N) ;
}
else g << querry(1,1,N) << '\n';
}
}