Pagini recente » Cod sursa (job #2235793) | Cod sursa (job #1901670) | Cod sursa (job #1097084) | Cod sursa (job #2549745) | Cod sursa (job #1152138)
#include <fstream>
#include <cstdio>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int n,m,x,v[400005];
int a,b,q, poz,maxim;
inline int max (int a,int b) {
if (a>b)
return a;
return b;
}
void query (int nod,int st, int dr) {
//int qs=-1,qd=-1;
if (a<=st && b>=dr){
maxim = max(maxim,v[nod]);
return;
}
int mid=(st+dr)>>1;
if (a<=mid)
query(nod<<1,st,mid);
if (b>mid)
query((nod<<1)+1,mid+1,dr);
}
void update (int nod, int st, int dr) {
if (st==dr) {
v[nod]=b;
return;
}
int mid=(st+dr)>>1;
if (poz<=mid)
update(nod<<1,st,mid);
else
if (poz>mid)
update((nod<<1)+1,mid+1,dr);
v[nod]=max(v[nod<<1],v[(nod<<1)+1]);
}
int main () {
register int i;
fin>>n>>q;
for (i=1;i<=n;i++) {
fin>>x;
poz=i;
b=x;
update(1,1,n);
}
while (q--) {
fin>>x>>a>>b;
if (x==0) {
maxim=0;
query(1,1,n);
fout<<maxim<<"\n";
}else{
poz=a;
update(1,1,n);
}
}
return 0;
}