HDU-1754 I Hate It
  • 板块学术版
  • 楼主kimi0705
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/1/10 22:00
  • 上次更新2023/10/24 04:49:14
查看原帖
HDU-1754 I Hate It
637788
kimi0705楼主2023/1/10 22:00
#include <iostream>
#include <algorithm> 
using namespace std;
const long long N = 200005;
long long arr[N], n, m;
struct Tree {
	long long l, r, maxx;
} tree[N * 4];
void built(long long i, long long l, long long r) {
	tree[i].l = l;
	tree[i].r = r;
	if (l == r) {
		tree[i].maxx = arr[l];
		return;
	}
	long long mid = (l + r) >> 1;
	built(i * 2, l, mid);
	built(i * 2 + 1, mid + 1, r);
	tree[i].maxx = max(tree[i * 2].maxx, tree[i * 2 + 1].maxx);
}
void add(long long i, long long j, long long k) {
	tree[i].maxx = max(tree[i].maxx, k);
	if (tree[i].l == tree[i].r) return;
	long long mid = (tree[i].l + tree[i].r) >> 1;
	if (j <= mid) add(i * 2, j, k);
	if (j > mid) add(i * 2 + 1, j, k);
}
long long get_maxx(long long i, long long l, long long r) {
	long long maxx = 0;
	if (tree[i].l >= l && r >= tree[i].r) {
		maxx = tree[i].maxx;
		return maxx;
	}
	if (tree[i * 2].r >= l) {
		maxx = max(get_maxx(i * 2, l, r), maxx);
	}
	if (tree[i * 2 + 1].l <= r) {
		maxx = max(get_maxx(i * 2 + 1, l, r), maxx);
	}
	return maxx;
}
int main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) cin >> arr[i];
	built(1, 1, n);
	for (int i = 1; i <= m; i++) {
		char flag;
		int a, b;
		cin >> flag >> a >> b;
		if (flag == 'U') {
			add(1, a, b);
		} else {
			cout << get_maxx(1, a, b) << endl;
		}
	}
	return 0;
}
2023/1/10 22:00
加载中...