Pagini recente » Cod sursa (job #589885) | Cod sursa (job #2151951) | Cod sursa (job #924693) | Cod sursa (job #826427) | Cod sursa (job #1012754)
#include <fstream>
using namespace std;
const int MAX_N = 100002;
int N, M, x, y;
int A[7*MAX_N];
inline void update(int node, int left, int right) {
if(left == right)
A[node] = y;
else {
int m = (left+right)/2;
if(x <= m)
update(2*node, left, m);
else update(2*node + 1, m+1, right);
A[node] = max(A[2*node], A[2*node + 1]);
}
}
inline int query(int node, int left, int right) {
int ans = 0;
if(x <= left && right <= y)
ans = A[node];
else {
int m = (left+right)/2;
if(x <= m)
ans = query(2*node, left, m);
if(y > m)
ans = max(ans, query(2*node + 1, m+1, right));
}
return ans;
}
int main() {
ifstream f("arbint.in");
ofstream g("arbint.out");
f >> N >> M;
for(int i = 1, value; i <= N; ++i) {
f >> y;
x = i;
update(1, 1, N);
}
for(int i = 1; i <= M; ++i) {
int t;
f >> t >> x >> y;
if(t == 0)
g << query(1, 1, N) << "\n";
else update(1, 1, N);
}
f.close();
g.close();
return 0;
}