Pagini recente » Cod sursa (job #2671322) | Cod sursa (job #329774) | Cod sursa (job #1038341) | Cod sursa (job #2260295) | Cod sursa (job #1477584)
#include <cstdio>
using namespace std;
#define BS 513
#define BC 256
int max(int a, int b) {return a > b ? a : b;}
struct Bucket {
int B[BS];
bool updated;
int maxv, sz;
int& operator[](int poz) {
return B[poz];
}
void Rebuild() {
maxv = 0;
for(int i=0; i<sz; i++)
maxv = max(maxv, B[i]);
updated = true;
}
int getMax() {
if(!updated) Rebuild();
return maxv;
}
};
Bucket B[BC];
void Update(int poz, int val) {
B[poz / BS][poz % BS] = val;
B[poz / BS].updated = false;
}
int Query(int a, int b) {
int i=a, bi, rez = 0;
for(bi=i/BS; i%BS && i<=b; i++)
rez = max(rez, B[bi][i % BS]);
for(bi=i/BS;i+BS-1<=b; i+=BS, bi++)
rez = max(rez, B[bi].getMax());
for(bi=i/BS; i<=b; i++)
rez = max(rez, B[bi][i % BS]);
return rez;
}
int main() {
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
int n, m, t, a, b;
scanf("%d%d", &n, &m);
B[0].sz = 1;
for(int i=1; i<=n; i++) {
scanf("%d", &a);
B[i / BS].sz ++;
Update(i, a);
}
while(m--) {
scanf("%d%d%d", &t, &a, &b);
if(t == 1) Update(a, b);
else printf("%d\n", Query(a, b));
}
return 0;
}