Pagini recente » Cod sursa (job #2648769) | Cod sursa (job #2854293) | Cod sursa (job #112844) | Cod sursa (job #2563691) | Cod sursa (job #152129)
Cod sursa(job #152129)
#include <stdio.h>
#define Nmax 111111
#define KKK 512
#define XXX KKK-1
int t[Nmax], n,m, MAX[Nmax/KKK];
int max(int A,int B)
{
if (A>B) return A;
return B;
}
void update(int i,int x)
{
int a=i/KKK;
if (MAX[a]<=x) { MAX[a] = x;t[i]=x; }
{
t[i] = x;MAX[a]=-1;
for (i=(i/KKK)*KKK;i&XXX;++i) if (t[i] > MAX[a]) MAX[a] = t[i];
}
}
int search(int a,int b)
{
int ret=-1;
for (int i=a;i<=b;)
if (i&XXX == 0 && i+KKK <= b)
{
if (ret < MAX[i/KKK]) ret = MAX[i/KKK];
i+=KKK;
}
else
{
if (ret < t[i]) ret = t[i];
++i;
}
return ret;
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d", &n,&m);
int i,x=1,a,b;
for (i=1;i<=n;++i)
{
scanf("%d", &t[i]);
if (MAX[i/KKK] < t[i]) MAX[i/KKK] = t[i];
}
for (i=1;i<=m;++i)
{
scanf("%d%d%d", &x,&a,&b);
if (x==0)
printf("%d\n", search(a,b));
else update(a,b);
}
return 0;
}