Pagini recente » Cod sursa (job #957812) | Cod sursa (job #2566119) | Cod sursa (job #2896515) | Cod sursa (job #2636588) | Cod sursa (job #1161068)
#include <cstdio>
#include <algorithm>
using namespace std;
inline int sl(int x) {return x<<1;}
inline int sr(int x) {return (x<<1)+1;}
const int dim=100000;
int n,m,x,y,maxim,arbore[1<<18];
void update(int nod,int st,int dr)
{
if(st==dr)
{
arbore[nod]=y;
}
else
{
int mij=(st+dr)/2;
if(x<=mij) update(sl(nod),st,mij);
else update(sr(nod),mij+1,dr);
arbore[nod]=max(arbore[sl(nod)],arbore[sr(nod)]);
}
}
void query(int nod,int st,int dr)
{
if(x<=st&&dr<=y)
{
if(maxim<arbore[nod]) maxim=arbore[nod];
}
else
{
int mij=(st+dr)/2;
if(x<=mij) query(sl(nod),st,mij);
if(mij<y) query(sr(nod),mij+1,dr);
}
}
void read_construct()
{
freopen("arbint.in","r",stdin);
scanf("%d%d",&n,&m);
for(int i=0;i<n;++i)
{
x=i+1;
scanf("%d",&y);
update(1,1,n);
}
}
int main()
{
read_construct();
int q;
freopen("arbint.out","w",stdout);
while(m)
{
--m;
scanf("%d%d%d",&q,&x,&y);
if(q)
{
update(1,1,n);
}
else
{
query(1,1,n);
printf("%d\n",maxim);
maxim=0;
}
}
return 0;
}