Pagini recente » Cod sursa (job #1315275) | Cod sursa (job #796403) | Cod sursa (job #1231743) | Cod sursa (job #1153628) | Cod sursa (job #2340165)
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m, v[100001], d[100001], p, a, b, st[1000001];
int RMQ(int ss, int se, int qs, int qe, int si)
{
if(qs<=ss && qe>=se)
return st[si];
if(se<qs || ss>qe)
return 0;
int mid= (ss+se)/2;
return max(RMQ(ss, mid, qs, qe, 2*si+1), RMQ(mid+1, se, qs, qe, 2*si+2));
}
int constr(int ss, int se, int si)
{
if(ss==se)
{
st[si]=v[ss];
d[ss]=si;
return v[ss];
}
int mid = (ss+se)/2;
st[si] = max(constr(ss, mid, 2*si+1), constr(mid+1, se, 2*si+2));
return st[si];
}
void update(int si)
{
if(si>=0)
{
st[si]=max(st[2*si+1],st[2*si+2]);
int q=0;
if(si%2==0)
{
if(si==2)
q=0;
else
q=(si-2)/2;
}
else
q=si/2;
update(q);
}
}
int main()
{
f>>n>>m;
for(int i=1; i<=n; i++)
f>>v[i];
constr(1, n, 0);
for(int i=1; i<=m; i++)
{
f>>p>>a>>b;
if(!p)
g<<RMQ(1, n, a, b, 0)<<'\n';
else
{
st[d[a]]=b;
int r=d[a];
int e=0;
if(r%2==0)
{
if(r==2)
e=0;
else
e=(r-2)/2;
}
else
e=r/2;
update(e);
}
}
return 0;
}