Pagini recente » Cod sursa (job #2950661) | Cod sursa (job #2794200) | Cod sursa (job #2667990) | Cod sursa (job #1473990) | Cod sursa (job #3155545)
#include <bits/stdc++.h>
using namespace std;
/// INPUT / OUTPUT
ifstream fin("arbint.in");
ofstream fout("arbint.out");
/////////////////////////////////////////////////////////////////////////////////////////////
/// STRUCTURES
struct SegmentTree
{
vector<int>tree;
SegmentTree(int n)
{
tree.resize(n + 1, 0);
}
inline void update(int node, int st, int dr, int pos, int val)
{
if(st == dr)
{
tree[node] = val;
}
else
{
int mid = (st + dr) / 2;
if(pos <= mid)
update(node * 2, st, mid, pos, val);
else
update(node * 2 + 1, mid + 1, dr, pos, val);
tree[node] = max(tree[node * 2], tree[node * 2 + 1]);
}
}
inline int query(int node, int st, int dr, int tree_left, int tree_right)
{
if(st >= tree_left && dr <= tree_right)
{
return tree[node];
}
if(st > tree_right || dr < tree_left)
return 0;
int mid = (st + dr) / 2;
return max(query(node * 2, st, mid, tree_left, tree_right), query(node * 2 + 1, mid + 1, dr, tree_left, tree_right));
}
};
/////////////////////////////////////////////////////////////////////////////////////////////
/// GLOBAL VARIABLES
const int NMAX = 1e5 + 5;
int n, queries;
SegmentTree arbint(NMAX);
/////////////////////////////////////////////////////////////////////////////////////////////
/// FUNCTIONS
/////////////////////////////////////////////////////////////////////////////////////////////
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
fin >> n >> queries;
for(int i = 1; i <= n; ++ i)
{
int a;
fin >> a;
arbint.update(1, 1, n, i, a);
}
while(queries--)
{
bool tip;
int a, b;
fin >> tip >> a >> b;
if(!tip)
{
fout << arbint.query(1, 1, n, a, b) << '\n';
}
else
{
arbint.update(1, 1, n, a, b);
}
}
}