Pagini recente » Cod sursa (job #62566) | Cod sursa (job #2065894) | Statistici delia andreea (deliaandreead) | Cod sursa (job #2764245) | Cod sursa (job #386246)
Cod sursa(job #386246)
#include <fstream>
using namespace std;
#define dim 100000
#define nmax 1<<18
inline int maxim(int a,int b)
{
if(a>b) return a;
return b;
}
int n,m,Arb[nmax],C[dim],Val,Pos,mx,cst,cdr;
ifstream f("arbint.in");
void Query(int nod,int left,int right)
{
if(left>=cst && right<=cdr)
{
if(Arb[nod]>mx)
mx=Arb[nod];
return;
}
int middle=(left+right)/2;
if(cst<=middle)
Query(2*nod,left,middle);
if(middle<cdr)
Query(2*nod+1,middle+1,right);
}
void Update(int nod,int left,int right)
{
if(left==right)
{
Arb[nod]=Val;
return;
}
int middle=(left+right)/2;
if(Pos<=middle)
Update(2*nod,left,middle);
else
Update(2*nod+1,middle+1,right);
Arb[nod]=maxim(Arb[2*nod],Arb[2*nod+1]);
}
void read()
{
int i;
f>>n>>m;
for(i=1;i<=n;++i)
{
f>>Val;
Pos=i;
Update(1,1,n);
}
}
void solve()
{
int ok,i,a,b;
ofstream g("arbint.out");
for(i=1;i<=m;++i)
{
f>>ok>>a>>b;
if(!ok)
{
mx=-1;
cst=a;
cdr=b;
Query(1,1,n);
g<<mx<<endl;
}
else
{
Pos=a;
Val=b;
Update(1,1,n);
}
}
}
int main()
{
read();
solve();
return 0;
}