Pagini recente » Istoria paginii utilizator/andy_vamos | Castel3 | Monitorul de evaluare | Istoria paginii preoni-2006/runda-1/clasament-9 | Cod sursa (job #152387)
Cod sursa(job #152387)
#include <stdio.h>
#define Nmax 111111
#define KKK 256
#define XXX KKK-1
#define W if (t[i] > MAX[i/KKK]) MAX[i/KKK] = t[i]; ++i;
#define Q W W W W W W W W W W W W W W W W
#define UPDATE i=(i/KKK)*KKK; Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q
int t[Nmax], n,m, MAX[Nmax/KKK];
void update(int i,int x)
{
if (t[i]^MAX[i/KKK])
{
t[i] = x;
if (t[i] > MAX[i/KKK]) MAX[i/KKK] = t[i];
}
else
{
t[i] = x;MAX[i/KKK]=-1;
UPDATE
}
}
int search(int a,int b)
{
int ret=-1;
for (int i=a;i<=b;)
{
#define T if (i&XXX == 0 && i+KKK <= b) { if (ret < MAX[i/KKK]) ret = MAX[i/KKK]; i+=KKK; }
T T T T T
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=0;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-1,b-1));
else update(a-1,b);
}
return 0;
}