Pagini recente » Cod sursa (job #3241618) | Statistici Maria Stefan (UCV_Nicola_Radulescu_Totolin) | Istoria paginii utilizator/teodora-maria | Monitorul de evaluare | Cod sursa (job #152382)
Cod sursa(job #152382)
#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;
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;
for (i=(i/KKK)*KKK;i&XXX;)
{
W W W W W W W W
W W W W W W W W
W W W W W W W W
W W W W W W W W
}
}
}
int search(int a,int b)
{
int ret=-1;
for (int i=a;i<=b;)
{
while (i&XXX == 0 && i+KKK <= b)
{
if (ret < MAX[i/KKK]) ret = MAX[i/KKK];
i+=KKK;
}
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;
}