Pagini recente » Cod sursa (job #2387398) | Cod sursa (job #2786484) | Cod sursa (job #2783351) | Cod sursa (job #226833) | Cod sursa (job #2419617)
#include <fstream>
#define mult 2000000000
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m, i, j, p, x, c, b, a, ans;
pair<int,int> v[525005];
int val[525005], q;
void upgrade(int nod, int poz)
{
if(v[nod].first==poz&&v[nod].second==poz)
val[nod]=x;
else if(v[nod].first<=poz&&v[nod].second>=poz)
{
upgrade(2*nod,poz);
upgrade(2*nod+1,poz);
val[nod]=max(val[2*nod],val[2*nod+1]);
}
}
void calculeaza(int nod, int l, int r)
{
if (v[nod].first>=l&&v[nod].second<=r)ans=max(ans,val[nod]);
else if((v[nod].first<=l&&v[nod].second>=r)||(v[nod].first>=l&&v[nod].first<=r&&v[nod].second>r)||(v[nod].second<=r&&v[nod].second>=l&&v[nod].first<l))
{
calculeaza(nod*2,l,r);
calculeaza(nod*2+1,l,r);
}
}
void fa_perechi(int nod)
{
if(val[nod]==0)
{
// fout<<nod<<'\n';
if(val[2*nod]!=0&&val[2*nod+1]!=0)
{
val[nod]=max(val[nod*2],val[2*nod+1]);
v[nod].first=min(v[nod*2].first,v[nod*2+1].first);
v[nod].second=max(v[nod*2].second,v[nod*2+1].second);
}
else
{
fa_perechi(2*nod);
fa_perechi(2*nod+1);
val[nod]=max(val[nod*2],val[2*nod+1]);
v[nod].first=min(v[nod*2].first,v[nod*2+1].first);
v[nod].second=max(v[nod*2].second,v[nod*2+1].second);
}
}
}
int main()
{
fin>>n>>q;
p=1;
while(p<n)
p*=2;
// p/=2;
for(i=p;i<=p+n-1;i++)
{
fin>>val[i];
v[i].first=v[i].second=i-p+1;
}
for(i=p+n;i<=p*2;i++)
val[i]=-1,v[i].first=v[i].second=i-p+1;
fa_perechi(1);
//fout<<p<<'\n';
for(i=1;i<=q;i++)
{
fin>>c>>a>>b;
if(c==0)
{
ans=-1;
calculeaza(1,a,b);
fout<<ans<<'\n';
}
else
{
x=b;
upgrade(1,a);
// for(j=1;j<=p+n-1;j++)
// fout<<val[j]<<' ';
// fout<<'\n';
}
}
//for(i=1;i<=p*2;i++)
// fout<<i<<' '<<val[i]<<' '<<v[i].first<<' '<<v[i].second<<'\n';
return 0;
}