Pagini recente » Cod sursa (job #1641178) | Cod sursa (job #2257498) | Cod sursa (job #2675317) | Monitorul de evaluare | Cod sursa (job #2695907)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int INF=1000000005;
int t[270000],a,b,val,poz;
void actual (int p, int st, int dr)
{
if (st==dr)
{
t[p]=val;
return;
}
int m=(st+dr)/2;
if (poz<=m)
{
actual(2*p,st,m);
}
else
{
actual(2*p+1,m+1,dr);
}
t[p]=max(t[2*p],t[2*p+1]);
}
int maxim(int p, int st, int dr)
{
if (a<=st && dr<=b)
return t[p];
int m=(st+dr)/2;
int maxst=-INF;
int maxdr=-INF;
if (a<=m)
{
maxst=maxim(2*p,st,m);
}
if (b>m)
{
maxdr=maxim(2*p+1,m+1,dr);
}
return max(maxst,maxdr);
}
int main()
{
int n,m;
in>>n>>m;
int v[n+5];
for (int i=1;i<=n;i++)
{
in>>v[i];
val=v[i];
poz=i;
actual(1,1,n);
}
for (int o=1;o<=m;o++)
{
int k,st,dr;
in>>k>>st>>dr;
if (k==0)
{
a=st;
b=dr;
out<<maxim(1,1,n)<<"\n";
}
if (k==1)
{
poz=st;
val=dr;
actual(1,1,n);
}
}
in.close();
out.close();
return 0;
}