Pagini recente » Cod sursa (job #503582) | Cod sursa (job #3158512) | Cod sursa (job #1512486) | Cod sursa (job #1909729) | Cod sursa (job #1427636)
#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;
}
#define DIM 100000
char buff[DIM];
var poz;
void Read(var &a) {
while(!isdigit(buff[poz]))
if(++poz == DIM)
cin.read(buff, DIM), poz=0;
a = 0;
while(isdigit(buff[poz])) {
a = a * 10 + buff[poz] - '0';
if(++poz == DIM)
cin.read(buff, DIM), poz=0;
}
}
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
cin.read(buff, DIM);
var m;
Read(n);
Read(m);
for(var i=1; i<=n; i++) {
Read(V[i]);
Buck[i/BSIZE] = max(Buck[i/BSIZE], V[i]);
}
var type, a, b;
while(m--) {
Read(type);
Read(a);
Read(b);
if(type == 1) update(a, b);
else cout << query(a, b) << '\n';
}
}