Pagini recente » Cod sursa (job #335099) | Cod sursa (job #104112) | Cod sursa (job #2771649) | Cod sursa (job #107957) | Cod sursa (job #629748)
Cod sursa(job #629748)
#include <iostream>
#include <fstream>
#define Nmax 100001
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int N, M,nod,arb[4*Nmax],p,x,A,B,maxim1,X;
inline int maxim(int x,int y)
{
if(x<y)
return y;
return x;
}
void update(int nod, int st, int dr)
{
if(st==dr)
{
arb[nod]=x;
return;
}
else
{
int mij=(st+dr)/2;
if(p<=mij)
update(2*nod,st,mij);
else
update(2*nod+1,mij+1,dr);
arb[nod]=maxim(arb[2*nod],arb[2*nod+1]);
}
}
void query(int nod,int st,int dr)
{
if(A<=st && dr<=B)
{
if(maxim1<arb[nod])
maxim1=arb[nod];
return;
}
else
{
int mij=(st+dr)/2;
if(A<=mij)
query(2*nod,st,mij);
if(mij<B)
query(2*nod+1,mij+1,dr);
}
}
void citire()
{
f>>N>>M;
int i;
for(i=1;i<=N;i++)
{
f>>x;
p=i;
update(1,1,N);
}
for(i=1;i<=M;i++)
{
f>>X>>A>>B;
if(X==1)
{
p=A;
x=B;
update(1,1,N);
}
if(X==0)
{
maxim1=-1;
query(1,1,N);
g<<maxim1<<'\n';
}
}
f.close();
g.close();
}
int main()
{
citire();
return 0;
}