Pagini recente » Cod sursa (job #3142509) | Cod sursa (job #1111628) | Cod sursa (job #1401419) | Cod sursa (job #539629) | Cod sursa (job #2738830)
#include <fstream>
#include <algorithm>
using namespace std;
//*
ifstream cin("arbint.in");
ofstream cout("arbint.out");
// */
const int MAXPN = 16384;
int n, m, pn;
int a[2*MAXPN+2];
int query(int st, int dr, int i, int start, int end) {
int fl = (start+end)/2;
if(start == end)
return a[i];
if(st < start && dr > end)
return a[i];
if(st > fl)
return query(st, dr, 2*i+1, fl+1, end);
if(dr <= fl)
return query(st, dr, 2*i, start, fl);
return max(query(st, dr, 2*i+1, fl+1, end), query(st, dr, 2*i, start, fl));
}
void update(int i, int b) {
a[i] = b;
for(i/=2; i>0; i/=2)
a[i] = max(a[2*i], a[2*i+1]);
}
int main()
{
cin >> n >> m;
int aux=n;
pn = 1;
while(aux > 0) {
aux >>= 1;
pn <<= 1;
}
if(pn == n*2)
pn = n;
for(int i=pn; i<pn+n; i++)
cin >> a[i];
for(int i=pn-1; i>0; i--)
a[i] = max(a[2*i], a[2*i+1]);
int x, xa, xb;
for(int i=1; i<=m; i++) {
cin >> x >> xa >> xb;
if(x == 0)
cout << query(xa, xb, 1, 1, pn-1) << '\n';
if(x == 1)
update(pn+xa-1, xb);
}
return 0;
}