Pagini recente » Cod sursa (job #627909) | Cod sursa (job #1102508) | Cod sursa (job #1437190) | Cod sursa (job #2159678) | Cod sursa (job #2062850)
#include <cstdio>
#include <algorithm>
#define Nmax 100005
using namespace std;
FILE *f=fopen("arbint.in","r");
FILE *g=fopen("arbint.out","w");
int m,n,x,y,cer;
int arb[4+Nmax];
void update(int node)
{
arb[node]=max(arb[2*node+1],arb[2*node]);
if(node>1)
update(node/2);
}
int query(int st, int dr) {
int ans = 0;
if(st == dr) {
ans = arb[st];
} else if(st < dr) {
if(st % 2 == 1) {
ans = max(ans, arb[st]);
st++;
}
if(dr % 2 == 0) {
ans = max(ans, arb[dr]);
dr--;
}
ans = max(ans, query(st / 2, dr / 2));
}
return ans;
}
int main()
{
int k=1;
fscanf(f,"%d%d",&n,&m);
while((1<<k)<n)
k++;
int Ni=(1<<k)-1;
for(int i=1;i<=n;i++)
{
int x;
fscanf(f,"%d",&x);
arb[Ni+i]=x;
update((Ni+i)/2);
}
while(m)
{
fscanf(f,"%d%d%d",&cer,&x,&y);
if(cer==1)
{
arb[Ni+x]=y;
update((Ni+x)/2);
}
else
{
fprintf(g,"%d\n",query(Ni+x,Ni+y));
}
m--;
}
return 0;
}