Pagini recente » Cod sursa (job #2541734) | Cod sursa (job #2605615) | Cod sursa (job #2644823) | Cod sursa (job #1062982) | Cod sursa (job #909981)
Cod sursa(job #909981)
#include <cstdio>
#define nMax 100010 * 4
#define max(a,b) ((a>b)?a:b)
using namespace std;
int n;
int m;
int arb[nMax];
int val;
int poz;
int ST;
int DR;
int maxim;
void baga(int nod, int st, int dr){
if(st == dr){
arb[nod] = val;
return;
}
int mij = (st + dr) >> 1;
if(poz <= mij){
baga(nod << 1, st, mij);
}else{
baga((nod << 1) + 1, mij + 1, dr);
}
arb[nod] = max(arb[nod << 1], arb[(nod << 1) + 1]);
}
void i(int nod, int st, int dr){
if(st >= ST && dr <= DR){
maxim = max(maxim, arb[nod]);
return;
}
int mij = (st + dr) >> 1;
if(mij < DR){
i((nod << 1) + 1, mij + 1, dr);
}
if(mij >= ST){
i(nod << 1, st, mij);
}
}
void citire(){
scanf("%d %d", &n, &m);
for(int i = 0; i < n; ++ i){
scanf("%d", &val);
poz = i + 1;
baga(1, 1, n);
}
while(m --){
int caz;
int x;
int y;
scanf("%d %d %d", &caz, &x, &y);
if(caz){
poz = x;
val = y;
baga(1, 1, n);
}else{
maxim = 0;
ST = x;
DR = y;
i(1, 1, n);
printf("%d\n", maxim);
}
}
}
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
citire();
return 0;
}