Pagini recente » Cod sursa (job #2703505) | Cod sursa (job #2360293) | tema | Cod sursa (job #1060420) | Cod sursa (job #1975899)
#include <fstream>
#include <cstdio>
#include <cmath>
#define Nmax 100001
using namespace std;
ofstream g("arbint.out");
int V[Nmax*3],N,n,m,x,y,t;
void up(int x,int val)
{
x+=N;
V[x] = val;
while (x>1)
{
x/=2;
V[x] = max(V[x*2],V[x*2+1]);
}
}
int query(int a,int b)
{
int rez = 0;
a+=N;
b+=N;
while (a<b)
{
rez = max(rez,max(V[a],V[b]));
a=(a+1)/2;
b=(b-1)/2;
}
if (a==b)
rez = max(rez,V[a]);
return rez;
}
int main()
{
freopen("arbint.in","r",stdin);
scanf("%d%d",&n,&m);
N = 1<<(int)log2(n);
if (N<n)
N *= 2;
N--;
n += N;
for (int i=N+1;i<=n;i++)
scanf("%d",&V[i]);
for (int i=N;i>=1;i--)
V[i] = max(V[i*2+1],V[i*2]);
for (int i=1;i<=m;i++)
{
scanf("%d%d%d",&t,&x,&y);
if (t==0)
g<<query(x,y)<<'\n';
else
up(x,y);
}
return 0;
}