Pagini recente » Cod sursa (job #636957) | Cod sursa (job #2463442) | Cod sursa (job #2464015) | Cod sursa (job #2327209) | Cod sursa (job #2757185)
#include <fstream>
using namespace std;
const int P2MAX = (1 << 18);
const int INF = 1 << 30;
int aint[P2MAX], poz, val, a, b;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
void actualizare(int p, int st, int dr) {
if (st == dr) {
aint[p] = val;
return;
}
int m = (st + dr) / 2;
if (poz <= m)
actualizare(2 * p, st, m);
else
actualizare(2 * p + 1, m + 1, dr);
aint[p] = max(aint[2 * p], aint[2 * p + 1]);
}
int interogare(int p, int st, int dr) {
if (st>=a && dr<=b)
return aint[p];
int m=(st+dr)/2,max_st=-INF,max_dr=-INF;
if (a<=m)
max_st = interogare(2 * p, st, m);
if (b>m)
max_dr = interogare(2 * p + 1, m + 1, dr);
return max(max_st, max_dr);
}
int main() {
int n,q;
cin>>n>>q;
for (poz=1;poz<=n;poz++){
cin>>val;
actualizare(1, 1, n);
}
while(q--){
bool tip;
cin>>tip;
if (!tip){
cin>>a>>b;
cout<<interogare(1, 1, n) << '\n';
}
else {
cin>>poz>>val;
actualizare(1, 1, n);
}
}
return 0;
}