Pagini recente » Cod sursa (job #1457404) | Cod sursa (job #2519612) | Cod sursa (job #1832958) | Cod sursa (job #1439520) | Cod sursa (job #959874)
Cod sursa(job #959874)
#include <fstream>
using namespace std;
#define max(x,y) (((x)>(y))?(x):(y))
#define N 400000
#define in "arbint.in"
#define out "arbint.out"
int I[N], x, a, b, n, m;
void add(int J, int lo, int hi) {
if (lo == hi) {
I[J] = x;
return;
}
int mid = (lo + hi) >> 1;
if (a <= mid)
add (J * 2, lo, mid);
else
add (J * 2 + 1, mid + 1, hi);
I[J] = max (I[J * 2], I[J * 2 + 1]);
}
void query(int J, int lo, int hi) {
if (a <= lo && hi <= b) {
x = max (x, I[J]);
return;
}
int mid = (lo + hi) >> 1;
if (a <= mid)
query (J * 2, lo, mid);
if (mid < b)
query (J * 2 + 1, mid + 1, hi);
}
int main() {
ifstream fin (in);
fin >> n >> m;
ofstream fout (out);
for (a = 1; a <= n; ++a) {
fin >> x;
add (1, 1, n);
}
for (int i = 0; i < m; ++i) {
bool t;
fin >> t;
if (!t) {
x = -1;
fin >> a >> b;
query (1, 1, n);
fout << x << "\n";
}
if (t) {
fin >> a >> x;
add (1, 1, n);
}
}
fcloseall();
return 0;
}