Pagini recente » Cod sursa (job #1325244) | Cod sursa (job #1154265) | Cod sursa (job #115539) | Cod sursa (job #941044) | Cod sursa (job #1802068)
#include <cstdio>
#include <algorithm>
#define buff_size 1000000
using namespace std;
FILE*f=freopen("arbint.in","r",stdin);
FILE*g=freopen("arbint.out","w",stdout);
char buff[buff_size],buffw[buff_size]="";
int arb[200001];
int pos=0,posw=0;
inline void read(int &nr)
{
while(buff[pos] < '0' || buff[pos] > '9') if(++pos == buff_size) fread(buff, buff_size,1, stdin), pos = 0;
nr = 0;
while('0' <= buff[pos] && buff[pos] <= '9')
{
nr = nr * 10 + buff[pos] - '0';
if(++pos == buff_size) fread(buff, 1, buff_size, stdin), pos = 0;
}
}
int main() {
int n,q,i;
int t,st,dr;
int rez;
fread(buff, buff_size,1, 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]);
for (i=1;i<=q;++i) {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;
}
posw += sprintf(buffw + posw,"%d\n",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(buffw, posw, 1, stdout);
}