Pagini recente » Cod sursa (job #187542) | Cod sursa (job #619982) | Cod sursa (job #949025) | Cod sursa (job #1757303) | Cod sursa (job #1040234)
#include <cstdio>
#include <algorithm>
#define Nmax 4 * 100005
#define INF 0x3f3f3f3f;
using namespace std;
int x,st,dr,ind,ans;
int range[ Nmax ];
void scan(int &A)
{
char c = 0; A = 0;
do
{
c = fgetc(stdin);
if('0' <= c && c <= '9')
A = A * 10 + c - 48;
} while('0' <= c && c <= '9');
}
void Update(int li,int lf,int pz)
{
if(li == lf)
{
range[ pz ] = x;
return;
}
int m = li +((lf-li)>>1);
if(ind <= m) Update(li,m,pz<<1);
else Update(m+1,lf,(pz<<1)+1);
range[ pz ] = max ( range[pz << 1] , range[(pz<<1) + 1]);
}
void Querry(int li,int lf,int pz)
{
if(st <= li && lf <= dr)
{
ans = max(ans,range[ pz ]);
return;
}
int m = li + ((lf-li)>>1);
if(st <= m) Querry(li,m,pz<<1);
if(dr > m) Querry(m+1,lf,(pz<<1)+1);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int N,M,op;
scan(N),scan(M);
for(int i = 1; i <= N; ++i)
{
ind = i;
scan(x);
Update(1,N,1);
}
for(int i = 1; i <= M; ++i)
{
scan(op);
if(op == 0)
{
ans = -INF;
scan(st),scan(dr);
Querry(1,N,1);
printf("%d\n",ans);
}
else
{
scan(ind),scan(x);
Update(1,N,1);
}
}
return 0;
}