Pagini recente » Cod sursa (job #1221594) | Cod sursa (job #974275) | Cod sursa (job #1016782) | Cod sursa (job #2564236) | Cod sursa (job #344899)
Cod sursa(job #344899)
#include<stdio.h>
int a[100005];
int A,B,x;
int Tree[263000];
int maxim;
int n,m;
void InitA(int nod, int st, int fin)
{
if (st == fin)
Tree[nod] = fin;
else
{
InitA(2*nod,st,(st+fin)/2);
InitA(2*nod + 1,(st+fin)/2 + 1, fin);
if (a[Tree[2*nod + 1]] > a[Tree[2*nod]])
Tree[nod] = Tree[2 * nod + 1];
else
Tree[nod] = Tree[2 * nod];
}
}
void Query(int nod,int st, int dr)
{
if (A <= st && dr <= B)
{
if (a[maxim] < a[Tree[nod]])
maxim = Tree[nod];
}
else
{
if (A <= (st + dr) / 2)
Query(2 * nod, st,(st+dr)/2);
if (B > (st + dr) / 2)
Query(2 * nod + 1,(st+dr)/2 + 1, dr);
if (a[Tree[2 * nod]] > a[Tree[2 * nod + 1]])
Tree[nod] = Tree[2 * nod];
else
Tree[nod] = Tree[2 * nod + 1];
}
}
void Update(int nod, int st, int dr)
{
if (st == dr && st == A)
{
return;
}
else
{
if (A <= (st + dr) / 2) Update(2 * nod,st,(st+dr)/2);
else Update(2 * nod + 1,(st+dr)/2 + 1, dr);
if (a[Tree[2 * nod]] > a[Tree[2 * nod + 1]])
Tree[nod] = Tree[2 * nod];
else
Tree[nod] = Tree[2 * nod + 1];
}
}
int main()
{
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]);
InitA(1,1,n);
for(int i = 1; i <= m; i++)
{
scanf("%d %d %d",&x,&A,&B);
if (x == 0)
{
maxim = 0;
Query(1,1,n);
printf("%d\n",a[maxim]);
}
if (x == 1)
{
a[A] = B;
Update(1,1,n);
}
}
return 0;
}