Pagini recente » Cod sursa (job #951545) | Cod sursa (job #1970543) | Cod sursa (job #537835) | Cod sursa (job #2466288) | Cod sursa (job #1743935)
#include <cstdio>
#include <algorithm>
using namespace std;
#define sizez 100004
int A[sizez],a,b,m,n,tip;
int Max[sizez],St[sizez],Dr[sizez];
int size = 0;
void Update();
int Query();
void smenuLuiBatog()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i = 1 ; i <= n ; i ++)
{
scanf("%d",&A[i]);
if( size*size<=n)
size++;
}
size--;
for(int i = 1 ; i *size <= n ; i++)
{
Max[i] = -1;
St[i] = size*(i-1)+1; Dr[i] = size*i;
for(int pos = St[i] ; pos <= Dr[i]; pos++)
Max[i] = max(Max[i],A[pos]);
}
while(m--)
{
scanf("%d %d %d",&tip,&a,&b);
if(tip)
Update();
else
printf("%d\n",Query());
}
}
void Update()
{
A[a] = b;
for(int i = 1 ; i*size <= n ; i++)
if(St[i]<= a && a <= Dr[i])
{
Max[i] = -1;
for(int pos = St[i] ; pos <=Dr[i] ; pos++)
Max[i] = max(Max[i],A[pos]);
break;
}
}
int Query()
{
int valmaxim = -1;
bool caz2 = true, caz3 = true;
int capata, inceputb;
for(int i = 1 ; i*size <= n ; i++)
{
if(a <= St[i] && Dr[i] <= b)
valmaxim = max(valmaxim,Max[i]);
if(a == St[i])
caz2 = false;
if(b == Dr[i])
caz3 = false;
if(a >= St[i] && a <=Dr[i])x
capata = Dr[i];
if(b >= St[i] && b <=Dr[i])
inceputb = St[i];
}
if(size*size < b)
inceputb = size*size + 1;
if(caz2)
for(int i = a ; i <= min(capata,b) ; i++)
valmaxim = max(valmaxim,A[i]);
if(caz3)
for(int i = max(inceputb,a); i<= b; i++)
valmaxim = max(valmaxim,A[i]);
return valmaxim;
}
int main()
{
smenuLuiBatog();
return 0;
}