Pagini recente » Cod sursa (job #473271) | Cod sursa (job #42212) | Cod sursa (job #2188757) | Cod sursa (job #604912) | Cod sursa (job #986931)
Cod sursa(job #986931)
#include <fstream>
using namespace std;
int v[1<<19],x,y,st,dr,poz,a,b,n,m;
int MAX(int x,int y)
{
if (x>y) return x;
return y;
}
inline void actualizare(int nod, int st, int dr)
{
int mij;
if (st>=poz && poz>=dr)
{v[nod]=x;return;}
else {
mij=(st+dr)/2;
if (poz<=mij) actualizare(nod*2,st,mij);
else actualizare(nod*2+1,mij+1,dr);
v[nod]=MAX(v[2*nod],v[2*nod+1]);}
}
inline int interogare(int nod, int st, int dr)
{
int mij,mx1,mx2;mx1=0;mx2=0;
if (a<=st && dr<=b) return v[nod];
mij=(st+dr)/2;
if (a<=mij) mx1=interogare(nod*2,st,mij);
if (b>mij) mx2=interogare(nod*2+1,mij+1,dr);
return MAX(mx1,mx2);
}
int main()
{
ifstream f("arbint.in");
ofstream g("arbint.out");
f>>n>>m;int i,op;
for (i=1;i<=n;i++) {f>>x;
poz=i;
actualizare(1,1,n);}
for (i=1;i<=m;i++)
{
f>>op>>a>>b;
if (op==1) poz=a,x=b,actualizare(1,1,n);
else g<<interogare(1,1,n)<<'\n';
}
f.close();
g.close();
return 0;
}