Pagini recente » Cod sursa (job #1463951) | Cod sursa (job #2606549) | Cod sursa (job #2088820) | Cod sursa (job #248274) | Cod sursa (job #218602)
Cod sursa(job #218602)
#include<stdio.h>
#define N 100000
#define INF 100001
int x,y,n,m,a[N<<2],b[N<<2],t[N<<2],fr[N];
inline void arbore(int p,int st,int dr)
{
if(st==dr)
{
fr[st]=p;
a[p]=b[p]=st;
return;
}
a[p]=st;
b[p]=dr;
int m=(st+dr)>>1;
arbore(p<<1,st,m);
arbore((p<<1)+1,m+1,dr);
}
/*
void proba(int n)
{
for(int i=1;i<=n<<2;++i)
printf("arb(%d)=[%d,%d] %d\n",i,a[i],b[i],t[i]);
for(int i=1;i<=n;++i)
printf("%d ",fr[i]);
}
*/
inline int maxim(int x,int y)
{
return x>y ? x : y;
}
inline void update(int p,int val)
{
t[p]=val;
for(p>>=1;p;p>>=1)
t[p]=maxim(t[p<<1],t[(p<<1)+1]);
}
void init()
{
int x;
scanf("%d%d",&n,&m);
arbore(1,1,n);
for(int i=1;i<=n;++i)
{
scanf("%d",&x);
update(fr[i],x);
}
}
int query(int p)
{
if(x<=a[p] && b[p]<=y)
return t[p];
int rez=-INF;
if(x<=b[p<<1])
rez=query(p<<1);
if(y>=a[(p<<1)+1])
rez=maxim(rez,query((p<<1)+1));
return rez;
}
void solve()
{
int tip;
while(m--)
{
scanf("%d%d%d",&tip,&x,&y);
if(tip==0)
printf("%d\n",query(1));
else
update(fr[x],y);
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
init();
solve();
//proba(n);
return 0;
}