Pagini recente » Cod sursa (job #808401) | Cod sursa (job #668474) | Cod sursa (job #782438) | Cod sursa (job #2778516) | Cod sursa (job #1653382)
#include <iostream>
#include <fstream>
#define nmax 300099
using namespace std;
long v[nmax];
long x,a,b,poz;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
//int max(int a,int b){if(a>b)return a;return b;}
void actualizare(long nod,long st,long dr)
{long mij;
if(st==dr){v[nod]=x;return;}
v[nod]=0;
mij=(st+dr)/2;
if(poz<=mij){actualizare(2*nod,st,mij);}
if(poz>mij){actualizare(2*nod+1,mij+1,dr);}
v[nod]=max(v[2*nod],v[2*nod+1]);
}
long interogare(long nod,long st,long dr)
{long mij,v1=0,v2=0;
if(a<=st && dr<=b)return v[nod];
mij=(st+dr)/2;
if(a<=mij)v1=interogare(2*nod,st,mij);
if(mij<b)v2=interogare(2*nod+1,mij+1,dr);
return max(v1,v2);
}
int main()
{long n,m,i;
fin>>n>>m;
for(i=1;i<=n;i++)
{fin>>x;
poz=i;
actualizare(1,1,n);
}
int op;
for(i=1;i<=m;i++)
{
fin>>op>>a>>b;
if(op==1){poz=a;x=b;actualizare(1,1,n);}
else {fout<<interogare(1,1,n)<<'\n';}
}
}