Pagini recente » Cod sursa (job #2749690) | Cod sursa (job #1116205) | Cod sursa (job #2527702) | Cod sursa (job #3246615) | Cod sursa (job #1223103)
# include <fstream>
# include <iostream>
# include <cstring>
# define MAX(a,b) ( (a) > (b) ? (a) : (b) )
using namespace std;
ifstream fi("arbint.in");
ofstream fo("arbint.out");
const int nmax=400005;
int S[nmax],M,x,y;
int read()
{
char c[30];
fi>>c;
int k=strlen(c),p=0;
for (int i=0;i<k;++i) p=p*10+c[i]-'0';
return (p);
}
void update(int nod,int p,int u)
{
if (p==u) S[nod]=y;else
{
int m=(p+u)/2;
if (x<=m) update(2*nod,p,m);
else update(2*nod+1,m+1,u);
S[nod]=MAX(S[2*nod],S[2*nod+1]);
}
}
void query(int nod,int p,int u)
{
if (x<=p && u<=y)M=MAX(M,S[nod]);
else
{
int m=(p+u)/2;
if (x<=m) query(2*nod,p,m);
if (m <y) query(2*nod+1,m+1,u);
}
}
int main(void)
{
int n=read(),
m=read(),
x,y;
for (int i=1;i<=n;++i)
x=i,
y=read(),
update(1,1,n);
while (m--)
if (read())
x=read(),
y=read(),
update(1,1,n);
else
x=read(),
y=read(),
M=-1,
query(1,1,n),
fo<<M<<"\n";
fo.close();
return 0;
}