Pagini recente » Cod sursa (job #864517) | Cod sursa (job #49640) | Cod sursa (job #3161806) | Cod sursa (job #61378) | Cod sursa (job #520360)
Cod sursa(job #520360)
#include<fstream.h>
#include<algorithm>
using namespace std;
#define maxim(a, b) (a>b? a:b)
int n,q,v[100005],ai[400000],a,b;
void cst(int k, int st, int dr)
{
if (st==dr)
{
ai[k]=v[st];
return;
}
int mij=(st+dr)/2;
cst(2*k,st,mij);
cst(2*k+1,mij+1,dr);
ai[k]=maxim(ai[k*2],ai[k*2+1]);
}
int getmax(int k, int st, int dr)
{
if (st>=a && dr<=b)
return ai[k];
int mij=(st+dr)/2;
int val=0;
if (mij>=a)
val=getmax(2*k,st,mij);
if (mij<b)
val=maxim(val, getmax(2*k+1,mij+1,dr));
return val;
}
void update( int k, int st, int dr)
{
if (st==dr)
{
ai[k]=v[a];
return;
}
int mij=(st+dr)/2;
if (mij>=a)
update(k*2,st, mij);
else
update (k*2+1, mij+1, dr);
ai[k]=maxim(ai[k*2],ai[k*2+1]);
}
int main ()
{
int op,i,j;
ifstream f("arbint.in");
ofstream g("arbint.out");
f>>n>>q;
for (i=1;i<=n;i++)
f>>v[i];
cst(1,1,n);
for (i=1;i<=q;i++)
{
f>>op;
f>>a>>b;
if (op==0)
g<<getmax (1,1,n)<<'\n';
else
{
v[a]=b;
update (1,1,n);
}
}
f.close();
g.close();
return 0;
}