Pagini recente » Cod sursa (job #1310861) | Cod sursa (job #671052) | Cod sursa (job #2580412) | Cod sursa (job #1839458) | Cod sursa (job #1092173)
#include <fstream>
#include <algorithm>
#define Nmax 100099
#define T(i) i/2
#define LS(i) (2*i)
#define RS(i) (2*i+1)
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int N,M,v[Nmax],Arb[4*Nmax],poz,val,a,b,sol;
void Update(int nod,int left,int right),Querry(int nod,int left,int right);
int main()
{
f>>N>>M;
for(poz=1;poz<=N;++poz)
{
f>>val;
Update(1,1,N);
}
for(int i=1;i<=M;++i)
{
int op;
f>>op>>a>>b;
if(!op)
{
sol=-1;
Querry(1,1,N);
g<<sol<<'\n';
}
else
{
poz=a,val=b;
Update(1,1,N);
}
}
f.close();g.close();
return 0;
}
void Querry(int nod,int left,int right)
{
if(a<=left && right<=b)
{
if(sol<Arb[nod])sol=Arb[nod];
return;
}
int middle=(left+right)>>1,son1=nod<<1,son2=(nod<<1)+1;;
if(a<=middle)Querry(son1,left,middle);
if(middle<b )Querry(son2,middle+1,right);
}
void Update(int nod,int left,int right)
{
if(left==right)
{
Arb[nod]=val;
return;
}
int middle=(left+right)>>1,son1=nod<<1,son2=(nod<<1)+1;
if(poz<=middle)Update(son1,left,middle);
else Update(son2,middle+1,right);
if(Arb[son1]>Arb[son2])Arb[nod]=Arb[son1];
else Arb[nod]=Arb[son2];
}