Pagini recente » Cod sursa (job #970248) | Cod sursa (job #2602571) | Cod sursa (job #908166) | Cod sursa (job #2676863) | Cod sursa (job #3148796)
#include <fstream>
#include <vector>
#include <climits>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
#define sz 100005
int n;
int m;
int tree[2 * sz];
void build()
{
for (int i=0; i<n; i++)
fin>>tree[n+i];
for (int i = n - 1; i > 0; --i)
tree[i] = max(tree[i<<1] , tree[(i<<1) + 1]);
}
void update(int p, int value)
{
p += n;
tree[p] = value;
for (int i=p; i > 1; i >>= 1)
tree[i>>1] =max( tree[i] , tree[i^1]);
}
int query(int l, int r)
{
int res = INT_MIN;
l+=n;
r+=n;
for (; l <= r; l >>= 1, r >>= 1)
{
if (l%2==1)
res = max(res,tree[l++]);
if (r%2==0)
res = max(res,tree[r--]);
}
return res;
}
int main()
{
fin>>n>>m;
build();
for(int i=1;i<=m;i++)
{
int q,a,b;
fin>>q>>a>>b;
if(q==0)
{
a--;
b--;
int rez = query(a,b);
fout<<rez<<'\n';
}
else
{
a--;
update(a,b);
}
}
}