Pagini recente » Cod sursa (job #49376) | Cod sursa (job #392028) | Cod sursa (job #2946664) | Cod sursa (job #1703302) | Cod sursa (job #1427630)
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;
typedef int var;
#define BSIZE 500
#define BCOUNT 5000
var V[100005];
var Buck[BCOUNT];
void update(var ind, var val) {
V[ind] = val;
if(Buck[ind/BSIZE] <= val)
Buck[ind/BSIZE] = val;
else {
Buck[ind/BSIZE] = -1;
for(var i=ind/BSIZE*BSIZE; ind%BSIZE; ind++)
Buck[ind/BSIZE] = max(Buck[ind/BSIZE], val);
}
}
var query(var l, var r) {
var i;
var rez = -1;
for(i=l; i<=r && i%BSIZE; i++)
rez = max(rez, V[i]);
for(var b=i/BSIZE; i+BSIZE<=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, n;
cin>>n>>m;
for(var i=1; i<=n; i++) {
cin>>V[i];
Buck[V[i]/BSIZE] = max(Buck[V[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';
}
}