Pagini recente » Cod sursa (job #882187) | Cod sursa (job #1901673) | Cod sursa (job #2312165) | Cod sursa (job #1918910) | Cod sursa (job #2572604)
#include <iostream>
#include <fstream>
#define f first
#define s second
using namespace std;
ifstream fi ("arbint.in");
ofstream fo ("arbint.out");
pair<pair<int,int>,int>w[500010];
int n,m,v[500010],a,b,maxx,cer;
void creare(int nod, int st, int dr)
{
w[nod].f.f=st;
w[nod].f.s=dr;
if(st==dr)
{
w[nod].s=v[st];
}
else
{
int mij=(st+dr)/2;
creare(2*nod,st,mij);
creare(2*nod+1,mij+1,dr);
w[nod].s=max(w[2*nod].s,w[2*nod+1].s);
}
}
void maxim(int nod)
{
if(a<=w[nod].f.f && w[nod].f.s<=b)
{
maxx=max(maxx,w[nod].s);
}
else
{
int mij=(w[nod].f.f+w[nod].f.s)/2;
if(a<=mij) maxim(nod*2);
if(b>mij) maxim(nod*2+1);
}
}
void actualizare(int nod)
{
if(a==w[nod].f.f && a==w[nod].f.s)
w[nod].s=b;
else
{
int mij=(w[nod].f.f+w[nod].f.s)/2;
if(a<=mij) actualizare(nod*2);
else actualizare(nod*2+1);
w[nod].s=max(w[nod*2].s,w[nod*2+1].s);
}
}
int main()
{
fi>>n>>m;
for(int i=1;i<=n;i++)
fi>>v[i];
creare(1,1,n);
for(int i=1;i<=m;i++)
{
fi>>cer>>a>>b;
if(cer==0)
{
maxx=0;
maxim(1);
fo<<maxx<<'\n';
}
else
{
actualizare(1);
}
}
fi.close();
fo.close();
return 0;
}