Pagini recente » Cod sursa (job #707435) | Cod sursa (job #2378948) | Cod sursa (job #1694986) | Cod sursa (job #1621859) | Cod sursa (job #152117)
Cod sursa(job #152117)
#include <stdio.h>
#define Nmax 111111
#define KKK 256
#define XXX 255
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(i&XXX)++a;
if (MAX[a]<=x) { MAX[a] = x;t[i]=x; }
{
t[i] = x;MAX[a]=-1;
int b,c;b=(a-1)*KKK+1;c=a*KKK;
for (int i=b;i<=c;++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 < t[i]) ret = t[i]; ++i;
if (ret < MAX[i/KKK+1]) ret = MAX[i/KKK+1];
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,a,b;
for (i=1;i<=n;++i)
{
scanf("%d", &x);
update(i,x);
}
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;
}