Pagini recente » Cod sursa (job #2729906) | Cod sursa (job #2964859) | Cod sursa (job #1757799) | Cod sursa (job #911502) | Cod sursa (job #1770736)
#include <fstream>
#include <cmath>
using namespace std;
int A[270000],S[270000],n,m;
int t,a,b,rezi;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
void FORGE(int st,int dr,int pos)
{
if (st==dr)
{
S[pos]=A[dr];
return;
}
int mij=(dr+st)/2;
FORGE(st,mij,2*pos);
FORGE(mij+1,dr,2*pos+1);
S[pos]=max(S[2*pos],S[2*pos+1]);
}
void MODIFY(int st,int dr,int p)
{
if (st==dr)
S[p]=A[st];
else
{
int mij=(st+dr)/2;
if (a<=mij)
MODIFY(st,mij,2*p);
else
MODIFY(mij+1,dr,2*p+1);
S[p]=max(S[2*p],S[2*p+1]);
}
}
void SEEK(int st,int dr,int p)
{
if (a<=st && dr<=b)
rezi=max(rezi,S[p]);
else
{
int mij=(st+dr)/2;
if (a<=mij)
SEEK(st,mij,2*p);
if (mij+1<=b)
SEEK(mij+1,dr,2*p+1);
}
}
int main()
{
fin>>n>>m;
for (int i=1;i<=n;i++)
fin>>A[i];
FORGE(1,n,1);
int len,z;
if (log2(n)-(int)log2(n)==0)
z=log2(n);
else
z=(int)log2(n)+1;
len=2*pow(2,z)-1;
for (int i=1;i<=m;i++)
{
fin>>t>>a>>b;
if (t==0)
{
rezi=0;
SEEK(1,n,1);
fout<<rezi<<"\n";
}
else
{
A[a]=b;
MODIFY(1,n,1);
}
}
return 0;
}