Pagini recente » Cod sursa (job #2961471) | Cod sursa (job #2445356) | Cod sursa (job #739924) | Cod sursa (job #2829974) | Cod sursa (job #2572353)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");ofstream fout("arbint.out");
pair<int,pair<int,int> >arb[200005];
int n,m,a,b,v[100010],maxx,cer;
void read()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
fin>>v[i];
}
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()
{
read();
build(1,1,n);
while(m)
{
fin>>cer>>a>>b;
maxx=0;
switch(cer)
{
case 0:
{
get_max(1);
fout<<maxx<<endl;
}
break;
case 1:
{
upgrade(1);
}
break;
}
m-=1;
}
fin.close();fout.close();
return 0;
}