Pagini recente » Cod sursa (job #1029869) | Cod sursa (job #2359288) | Cod sursa (job #2806271) | Cod sursa (job #3217224) | Cod sursa (job #1046363)
#include<fstream>
using namespace std;
#define N 100005
int init[N],n,m,v[4*N+50],p1,p2;
void cstr(int st,int dr,int poz)
{
if(st==dr)
{
init[st]=poz;
return ;
}
int mijl=(st+dr)/2;
cstr(st,mijl,poz*2);
cstr(mijl+1,dr,poz*2+1);
}
void update(int poz,int val)
{
int x=init[poz];
v[x]=val;
for(x/=2; x>0; x/=2)
v[x]=max(v[2*x],v[2*x+1]);
}
int query(int st,int dr,int poz)
{
if(p2<st||p1>dr)
return 0;
int x;
if(p1<=st&&dr<=p2)
return v[poz];
int mijl=(st+dr)/2;
return max(query(st,mijl,2*poz),query(mijl+1,dr,2*poz+1));
}
int main()
{
ifstream f("arbint.in");
ofstream g("arbint.out");
f>>n>>m;
int i,o,x;
cstr(1,n,1);
for(i=1; i<=n; ++i)
{
f>>x;
update(i,x);
}
for(i=1; i<=m; ++i)
{
f>>o>>p1>>p2;
if(o==0)
g<<query(1,n,1)<<'\n';
else
update(p1,p1);
}
f.close();
g.close();
return 0;
}