Pagini recente » Cod sursa (job #769302) | Cod sursa (job #805056) | Cod sursa (job #464501) | Cod sursa (job #2549929) | Cod sursa (job #934240)
Cod sursa(job #934240)
#include <stdio.h>
#include <fstream>
using namespace std;
int n,m;
int v[300001];
int poz,val;
int inline max(int x,int y){
return x>y?x:y;
}
void update(int p,int st,int dr){
if (st==dr){
v[p]=val;
return;
}
int m=(st+dr)/2;
if (poz<=m)
update(2*p,st,m); else
if (poz>m)
update(2*p+1,m+1,dr);
v[p]=max(v[2*p],v[2*p+1]);
}
int a,b;
int query(int p,int st,int dr){
if (a<=st && dr<=b)
return v[p];
int m=(st+dr)/2,m1=-1,m2=-1;
if (a<=m)
m1=query(2*p,st,m);
if (b>m)
m2=query(2*p+1,m+1,dr);
return m1>m2?m1:m2;
}
int main()
{
ifstream in("arbint.out");
freopen("arbint.out","w",stdout);
in>>n>>m;
int x,i,temp1,temp2;
for (i=1; i<=n; i++){
in>>x;poz=i;val=x;
update(1,1,n);
}
for (i=1; i<=m; i++){
in>>x>>temp1>>temp2;
if (x==0){
a=temp1;
b=temp2;
printf("%d\n",query(1,1,n));
}
if (x==1) {poz=temp1;val=temp2;update(1,1,n);};
}
return 0;
}