Pagini recente » Cod sursa (job #2435303) | Cod sursa (job #2068965) | Cod sursa (job #1189681) | Cod sursa (job #1166151) | Cod sursa (job #2499712)
#include <iostream>
#include <fstream>
#define f first
#define s second
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
pair<pair<int,int>,int> arb[200015];
int n,m,a,b,v[100010],maxx;
void actualizare(int nod)
{
int st,dr,mij;
st=arb[nod].f.f;
dr=arb[nod].f.s;
if(a==st&&a==dr)
{
arb[nod].s=b;
}
else
{
mij=(st+dr)/2;
if(a<=mij)
actualizare(2*nod);
else
actualizare(2*nod+1);
arb[nod].s=max(arb[2*nod].s,arb[2*nod+1].s);
}
}
void maxim(int nod)
{
int st,dr,mij,val;
st=arb[nod].f.f;
dr=arb[nod].f.s;
if(a<=st&&dr<=b)
{
val=arb[nod].s;
maxx=max(maxx,val);
}
else
{
mij=(st+dr)/2;
if(a<=mij)
maxim(2*nod);
if(b>mij)
maxim(2*nod+1);
}
}
void construire(int nod,int st,int dr)
{
int mij;
arb[nod].f.f=st;
arb[nod].f.s=dr;
if(st!=dr)
{
mij=(st+dr)/2;
construire(2*nod,st,mij);
construire(2*nod+1,mij+1,dr);
arb[nod].s=max(arb[2*nod].s,arb[2*nod+1].s);
}
else
{
arb[nod].s=v[st];
}
}
void afisare(int nod)
{
int st,dr,val;
st=arb[nod].f.f;
dr=arb[nod].f.s;
val=arb[nod].s;
if(st!=dr)
{
afisare(2*nod);
}
fout<<st<<" "<<dr<<" "<<val<<'\n';
if(st!=dr)
{
afisare(2*nod+1);
}
}
int main()
{
int i,j,cer;
fin>>n>>m;
for(i=1; i<=n; i++)
fin>>v[i];
construire(1,1,n);
// afisare(1);
for(i=1; i<=m; i++)
{
fin>>cer;
fin>>a>>b;
if(cer==0)
{
maxx=0;
maxim(1);
fout<<maxx<<'\n';
}
else
{
actualizare(1);
}
}
}