Pagini recente » Cod sursa (job #1626385) | Cod sursa (job #340385) | Cod sursa (job #2036834) | Cod sursa (job #2938493) | Cod sursa (job #3162215)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
const int maxDim = 1e5 + 5;
int seg_tree[2 * maxDim] , a[maxDim] , n , q;
struct SegTree
{
void Build ()
{
for(int i = 0 ; i < n ; ++i)
seg_tree[i + n] = a[i];
for(int i = n - 1 ; i > 0 ; --i)
seg_tree[i] = max(seg_tree[i << 1] , seg_tree[i << 1 | 1]);
}
void Update (int p , int t)
{
p += n;
seg_tree[p] = t;
for(int i = p ; i > 1 ; i >>= 1)
seg_tree[i >> 1] = max(seg_tree[i] , seg_tree[i ^ 1]);
}
int Query (int l , int r)
{
int ans = 0;
l += n , r += n;
while(l < r)
{
if(l & 1)
ans = max(ans , seg_tree[l++]);
if(r & 1)
ans = max(ans , seg_tree[--r]);
l >>= 1 , r >>= 1;
}
return ans;
}
}T;
int main()
{
fin >> n >> q;
for(int i = 0 ; i < n ; ++i)
fin >> a[i];
T.Build();
while(q --)
{
int t , a , b;
fin >> t >> a >> b;
if(t == 0)
fout << T.Query(a - 1 , b) << '\n';
else
T.Update(a - 1 , b);
}
}