Pagini recente » Cod sursa (job #3161964) | Cod sursa (job #799797) | Cod sursa (job #2195927) | Cod sursa (job #2377194) | Cod sursa (job #1308687)
#include <fstream>
using namespace std;
#define dim 100001
int n,m, start, finis, poz, val,maxim, maxarb[4*dim+66];
ifstream f1("arbint.in");
ofstream f2("arbint.out");
int max(int a, int b)
{ if (a>b) return a;
return b; }
void update(int nod, int st, int dr)
{ if (st==dr)
{ maxarb[nod]=val; return; }
int mij=(st+dr)/2;
if (poz<=mij) update(2*nod, st, mij);
else update(2*nod+1, mij+1, dr);
maxarb[nod]=max(maxarb[2*nod], maxarb[2*nod+1]); }
void query(int nod, int st, int dr)
{ if ((start<=st) && (dr<=finis))
{ if (maxim<maxarb[nod]) maxim=maxarb[nod]; return; }
int mij=(st+dr)/2;
if (start<=mij) query(nod*2,st,mij);
if (mij<finis) query(nod*2+1,mij+1,dr); }
int main()
{ int x,a,b,i;
f1>>n>>m;
for (i=1; i<=n; i++)
{ f1>>val;
poz=i;
update(1,1,n); }
for (i=1; i<=m;i++)
{ f1>>x>>a>>b;
if (x==0) { start=a; finis=b; maxim=0;
query(1,1,n); f2<<maxim<<"\n"; }
else { poz=a; val=b; update(1,1,n); } }
f1.close();
f2.close();
return 0;
}