Pagini recente » Cod sursa (job #1901123) | Cod sursa (job #1084673) | Cod sursa (job #1766329) | Cod sursa (job #743758) | Cod sursa (job #1427635)
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;
typedef int var;
#define BSIZE 640
#define BCOUNT 5000
var V[100005];
var Buck[BCOUNT];
var n;
void update(var ind, var val) {
V[ind] = val;
var b = ind/BSIZE;
Buck[b] = -1;
var inc = max(1, b*BSIZE);
var sf = min(n, (b+1)*BSIZE - 1);
for(var i=inc; i<=sf; i++)
Buck[b] = max(Buck[b], V[i]);
}
var query(var l, var r) {
var i;
var rez = -1;
for(i=l; i%BSIZE; i++) {
if(i > r) return rez;
rez = max(rez, V[i]);
}
for(var b=i/BSIZE; i+BSIZE-1<=r; i+=BSIZE, b++)
rez = max(rez, Buck[b]);
for(; i<=r; i++)
rez = max(rez, V[i]);
return rez;
}
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
var m;
cin>>n>>m;
for(var i=1; i<=n; i++) {
cin>>V[i];
Buck[i/BSIZE] = max(Buck[i/BSIZE], V[i]);
}
var type, a, b;
while(m--) {
cin>>type>>a>>b;
if(type == 1) update(a, b);
else cout << query(a, b) << '\n';
}
}