Pagini recente » Cod sursa (job #2351557) | Cod sursa (job #1706988) | Cod sursa (job #2271161) | Cod sursa (job #974594) | Cod sursa (job #2174415)
#include <bits/stdc++.h>
using namespace std;
const int nmax = 100010;
inline int Max(int a, int b){
if (a > b)
return a;
return b;
}
int MaxArb[ 4 * nmax ];
int n, m;
int start, stop;
int pos, val;
int maxim;
void update(int nod, int left, int right){
if (left == right){
MaxArb[ nod ] = val;
return;
}
int mid = (left + right) / 2;
if (pos <= mid)
update(2 * nod, left, mid);
else
update(2 * nod + 1, mid + 1, right);
MaxArb[ nod ] = Max( MaxArb[2 * nod], MaxArb[2 * nod+ 1 ]);
}
void Query(int nod, int left, int right){
if (start <= left && right <= stop){
if (maxim < MaxArb[ nod ])
maxim = MaxArb[ nod ];
return;
}
int mid = (left + right) / 2;
if ( start <= mid ) Query(2 * nod, left, mid);
if ( mid < stop ) Query(2 * nod + 1, mid + 1,right);
}
int main(){
ios_base::sync_with_stdio( false );
cin.tie( 0 );
ifstream cin("arbint.in");
ofstream cout("arbint.out");
cin >> n >> m;
for (int i = 0, x; i < n; ++i){
cin >> x;
pos = i + 1; val = x;
update(1, 1, n);
}
for (int i = 0, x, y, z; i < m; ++i){
cin >> x >> y >> z;
if (x == 0){
maxim = -1;
start = y; stop = z;
Query(1, 1, n);
cout << maxim << '\n';
}
else{
pos = y; val = z;
update(1, 1, n);
}
}
}