Pagini recente » Cod sursa (job #2549222) | Cod sursa (job #37926) | Cod sursa (job #220603) | Cod sursa (job #2107203) | Cod sursa (job #1022896)
#include <iostream>
#include <fstream>
using namespace std;
struct arbint
{
int x,l,r;
} v[400005];
int ax,d,n,m,i,q,a,b;
void process(int i)
{
if (i>=2*ax)
return;
process(i*2);
process(i*2+1);
v[i].x=max(v[2*i].x,v[2*i+1].x);
v[i].l=v[2*i].l;
v[i].r=v[2*i+1].r;
}
void change(int i)
{
if (i==0)
return;
v[i].x=max(v[2*i].x,v[2*i+1].x);
change(i/2);
}
int extract(int i,int ll,int rr)
{
if ((ll==v[i].l)&&(rr==v[i].r))
return v[i].x;
int st=2*i,dr=2*i+1;
if (v[st].r>=rr)
return extract(st,ll,rr);
if (v[dr].l<=ll)
return extract(dr,ll,rr);
int a=extract(dr,v[dr].l,rr);
int b=extract(st,ll,v[st].r);
int c=max(a,b);
return c;
}
int main(void)
{
FILE * f;
f=fopen("arbint.in","r");
ofstream g("arbint.out");
fscanf(f,"%d%d",&n,&m);
ax=n;
d=0;
v[0].x=2000000000;
while (ax!=0)
{
d++;
ax=ax/2;
}
d--;
ax=(1<<d);
for (i=0;i<n;i++)
fscanf(f,"%d",&v[i+2*ax].x);
for (i=2*ax;i<=4*ax;i++)
v[i].l=v[i].r=i-2*ax+1;
process(1);
for (i=0;i<m;i++)
{
fscanf(f,"%d%d%d",&q,&a,&b);
if (q==1)
{
v[2*ax+a-1].x=b;
change((2*ax+a-1)/2);
}
if (q==0)
{
g<<extract(1,a,b)<<'\n';
}
}
g.close();
return 0;
}