Pagini recente » Cod sursa (job #441150) | Cod sursa (job #2590275) | Cod sursa (job #429885) | Cod sursa (job #2191655) | Cod sursa (job #1802104)
#include <fstream>
#define buff_size 666666
using namespace std;
FILE*f=freopen("arbint.in","r",stdin);
FILE*g=freopen("arbint.out","w",stdout);
char buff[buff_size];
int arb[200001];
int pos=0;
inline void read(int &nr)
{
while(buff[pos] < '0' || buff[pos] > '9') if(++pos == buff_size) fread(buff, 1,buff_size, stdin), pos = 0;
nr = 0;
while('0' <= buff[pos] && buff[pos] <= '9')
{
nr = (nr<<1)+(nr<<3)+ buff[pos] - '0';
if(++pos == buff_size) fread(buff, 1, buff_size, stdin), pos = 0;
}
}
char outBuff[buff_size];
int outPtr;
inline void putChar(const char &C) {
outBuff[outPtr++] = C;
if (outPtr == buff_size) {
fwrite(outBuff, 1, buff_size, stdout);
outPtr = 0;
}
}
inline void write(int X) {
char digs[10];
int n = 0, q;
do {
q = X / 10;
digs[n++] = X - (q << 1) - (q << 3) + '0';
X = q;
} while (X);
while (n--) {
putChar(digs[n]);
}
putChar('\n');
}
int main() {
int n,q,i;
int t,st,dr;
int rez;
fread(buff, 1, buff_size, stdin);
read(n);read(q);
for (i=0;i<n;++i) read(arb[i+n]);
for (i=n-1;i;--i) arb[i] = max( arb[i<<1],arb[(i<<1)|1]);
while(q--) {read(t);
if (t==0)
{
read(st);read(dr);st+=n-1;dr+=n-1;
rez = 0;
while (st <= dr) {
rez = max(rez, max(arb[st], arb[dr]));
st = (st + 1) >> 1;
dr = (dr - 1) >> 1;
}
write(rez);
}
else{
read(dr);dr+=n-1;read(arb[dr]);
while (dr > 1) {
st = dr >> 1;
arb[st] = max(arb[dr], arb[dr ^ 1]);
dr = st;
}
}
}
fwrite(outBuff, 1, outPtr, stdout);
}