Pagini recente » Cod sursa (job #186028) | Cod sursa (job #2246275) | Cod sursa (job #2741817) | Cod sursa (job #2859262) | Cod sursa (job #1081869)
#include <iostream>
#include <fstream>
using namespace std;
ofstream fout("arbint.out");
#define MAX 300010
FILE *fin=fopen("arbint.in", "r");
unsigned const maxb=8192;
char buf[maxb];
int ptr=maxb-1;
int getInt()
{
int nr=0;
while(buf[ptr]>'9' || buf[ptr]<'0')
{
if(++ptr>=maxb)
fread(buf, maxb, 1, fin), ptr=0;
}
while(buf[ptr]<='9' && buf[ptr]>='0')
{
nr=nr*10+buf[ptr]-'0';
if(++ptr>=maxb)
fread(buf, maxb, 1, fin), ptr=0;
}
return nr;
}
int arb[MAX];
int a, b;
void update(int nod, int val)
{
arb[nod]=val;
nod>>=1;
while(nod)
{
arb[nod]=max(arb[nod*2], arb[nod*2+1]);
nod>>=1;
}
}
int query(int nod, int st, int dr)
{
if(a<=st && dr<=b)
{
return arb[nod];
}
if(dr<a || b<st)
return 0;
int mid=(dr+st)>>1;
return max(query(nod<<1, st, mid), query((nod<<1)+1, mid+1, dr));
}
int main()
{
int n, m, cn, i, x, y;
n=getInt();
m=getInt();
cn=n;
if(cn&(cn-1))
{
while(cn&(cn-1))
{
cn&=(cn-1);
}
cn<<=1;
}
for(i=1;i<=n;i++)
{
x=getInt();
update(cn-1+i, x);
}
while(m--)
{
int tip;
tip=getInt();
if(tip)
{
x=getInt();
y=getInt();
update(cn-1+x, y);
}
else
{
a=getInt();
b=getInt();
fout<<query(1, 1, cn)<<"\n";
}
}
fout.close();
}