Pagini recente » Cod sursa (job #442517) | Cod sursa (job #1940910) | Cod sursa (job #2297501) | Cod sursa (job #910355) | Cod sursa (job #2572481)
#include <fstream>
using namespace std;
ifstream fin("arbint.in");ofstream fout("arbint.out");
pair<int,pair<int,int> >arb[500010];
int n,m,a,b,v[100010],maxx,cer;
void build(int nod,int st,int dr)
{
arb[nod].first=st;
arb[nod].second.first=dr;
if(st!=dr)
{
int mij=(st+dr)/2;
build(2*nod,st,mij);
build(2*nod+1,mij+1,dr);
arb[nod].second.second=max(arb[2*nod].second.second,arb[2*nod+1].second.second);
}else
{
arb[nod].second.second=v[st];
}
}
void get_max(int nod)
{
if(a<=arb[nod].first && arb[nod].second.first<=b)
{
int var=arb[nod].second.second;
maxx=max(var,maxx);
}else
{
int mij=(arb[nod].first+arb[nod].second.first)/2;
if(a<=mij)
{
get_max(2*nod);
}
if(b>mij)
{
get_max(2*nod+1);
}
}
}
void upgrade(int nod)
{
if(a==arb[nod].first && a==arb[nod].second.first)
{
arb[nod].second.second=b;
}else
{
int mij=(arb[nod].first+arb[nod].second.first)/2;
if(a<=mij)
upgrade(2*nod);
else
upgrade(2*nod+1);
arb[nod].second.second=max(arb[2*nod].second.second,arb[2*nod+1].second.second);
}
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
fin>>v[i];
build(1,1,n);
while(m)
{
fin>>cer>>a>>b;
maxx=0;
if(cer==0)
{
get_max(1);
fout<<maxx<<'\n';
}
else
upgrade(1);
m-=1;
}
fin.close();fout.close();
return 0;
}