Pagini recente » Cod sursa (job #1486907) | Cod sursa (job #2465336) | Cod sursa (job #1968449) | Cod sursa (job #630591) | Cod sursa (job #2931809)
#include <fstream>
using namespace std;
#define N 100000
int tree[1<<18]; //2^k > N
int posInVector, nodeValue;
void updateTree(int st, int dr, int node) {
if (st == dr) {
tree[node] = nodeValue;
}
else {
int mid = (st + dr) / 2;
if (posInVector <= mid) {
updateTree(st, mid, 2 * node);
}
if (mid < posInVector) {
updateTree(mid + 1, dr, 2 * node + 1);
}
tree[node] = max(tree[2 * node], tree[2 * node + 1]);
}
}
int ma;
void detMaxim(int st, int dr, int a, int b, int node) {
if (a <= st && dr <= b) {
ma = max(ma, tree[node]);
}
else {
int mid = (st + dr) / 2;
if (a <= mid) {
detMaxim(st, mid, a, b, 2 * node);
}
if (mid < b) {
detMaxim(mid + 1, dr, a, b, 2 * node + 1);
}
}
}
int main() {
ifstream f("arbint.in");
ofstream g("arbint.out");
int totalNodes, queries, a, b, type;
f >> totalNodes >> queries;
for (int i = 1; i <= totalNodes; ++i) {
f >> nodeValue;
posInVector = i;
updateTree(1, totalNodes, 1);
}
for (int i = 1; i <= queries; ++i) {
f >> type >> a >> b;
if (type) {
posInVector = a;
nodeValue = b;
updateTree(1, totalNodes, 1);
}
else {
ma = INT32_MIN;
detMaxim(1, totalNodes, a, b, 1);
g << ma << "\n";
}
}
return 0;
}