Pagini recente » Cod sursa (job #2863245) | Cod sursa (job #2928927) | Cod sursa (job #2491986) | Cod sursa (job #2973881) | Cod sursa (job #1881423)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("arbint.in");
ofstream fout ("arbint.out");
const int maxn = 1e5 + 5;
int T[maxn << 1], n;
class Scanner {
private:
static const int maxb = 1 << 17;
char Buff[maxb];
int i = maxb - 1;
void Advance() {
if (++i == maxb) {
i = 0;
f.read(Buff, maxb);
}
}
public:
inline Scanner& operator >> (int &val) {
while (!(isdigit(Buff[i]))) {
Advance();
}
val = 0;
while (isdigit(Buff[i])) {
val = (val << 1) + (val << 3) + (Buff[i] - '0');
Advance();
}
return *this;
}
} fin;
void Build () {
for (int i = n - 1; i > 0; i--) {
T[i] = max(T[i << 1], T[i << 1 | 1]);
}
}
void Update (int pos, int val) {
pos += n - 1;
for (T[pos] = val; pos > 1; pos >>= 1) {
T[pos >> 1] = max(T[pos], T[pos ^ 1]);
}
}
int Query (int left, int right) {
int ans = -1;
left += n - 1;
right += n - 1;
while (left <= right) {
ans = max(ans, max(T[left++], T[right--]));
left >>= 1;
right >>= 1;
}
return ans;
}
int main () {
ios_base :: sync_with_stdio(false);
int m, x, y, op, i;
fin >> n >> m;
for (i = 0; i < n; i++) {
fin >> T[i + n];
}
Build();
while (m--) {
fin >> op >> x >> y;
if (op == 1) {
Update(x, y);
} else {
fout << Query(x, y) << "\n";
}
}
f.close();
fout.close();
return 0;
}