Pagini recente » Cod sursa (job #1923130) | Cod sursa (job #2286797) | Cod sursa (job #1447789) | Istoria paginii runda/xxx | Cod sursa (job #2843901)
#include <fstream>
using namespace std;
ifstream cin ("arbint.in");
ofstream cout ("arbint.out");
int n,m;
int v[1 << 18];
void update(int i, int x, int node=1, int st=1, int dr=n)
{
if(st==dr)
{
v[node]=x;
return;
}
int m=(st+dr)/2;
if(i<=m)
{
update(i, x, 2*node, st, m);
}
else
{
update(i, x, 2*node+1, m+1,dr);
}
v[node]=max(v[2*node],v[2*node+1]);
}
int query(int is, int ir, int node=1, int st=1, int dr=n)
{
if(is<=st && dr<=ir)
{
return v[node];
}
int stres=-1;
int drres=-1;
int m=(st+dr)/2;
if(is<=m)
{
stres=query(is, ir, 2*node, st, m);
}
if(ir>m)
{
drres=query(is, ir, 2*node+1, m+1, dr);
}
return max(stres, drres);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
update(i, x);
}
while(m--)
{
int a,b,c;
cin>>a>>b>>c;
if(a==0)
{
cout<<query(b,c)<<'\n';
}
else
{
update(b,c);
}
}
return 0;
}