线段树(单点更新) 之 hdu 1754
2014-07-25 11:31
225 查看
// [7/25/2014 Sjm] /* 线段树单点更新水题。。。 */
#include <iostream> #include <cstdlib> #include <cstdio> #include <algorithm> using namespace std; #define lson l, m, rt<<1 #define rson m+1, r, rt<<1|1 #define GetMid l + ((r-l)>>1) const int MAX_N = 200005; int MAX[MAX_N << 2]; void PushUp(int rt) { MAX[rt] = max(MAX[rt << 1], MAX[rt << 1 | 1]); } void Build(int l, int r, int rt) { if (l == r) { scanf("%d", &MAX[rt]); return; } int m = GetMid; Build(lson); Build(rson); PushUp(rt); } void Update(int p, int grade, int l, int r, int rt) { if (l == r) { MAX[rt] = grade; return; } int m = GetMid; if (p <= m) { Update(p, grade, lson); } else { Update(p, grade, rson); } PushUp(rt); } int Query(int L, int R, int l, int r, int rt) { if (L <= l && r <= R) { return MAX[rt]; } int m = GetMid; int ans = 0; if (L <= m) { ans = max(ans, Query(L, R, lson)); } if (R > m) { ans = max(ans, Query(L, R, rson)); } return ans; } int main() { //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); int N, M, a, b; char ch[2]; while (~scanf("%d %d", &N, &M)) { Build(1, N, 1); while (M--) { scanf("%s %d %d", ch, &a, &b); if ('Q' == ch[0]) { printf("%d\n", Query(a, b, 1, N, 1)); } else { Update(a, b, 1, N, 1); } } } return 0; }
相关文章推荐
- Hdu-1754 I hate it【线段树(单点更新)】
- hdu 1754 I Hate It 线段树 单点更新
- hdu 1754 I Hate It(线段树,单点更新,区间最值)
- hdu 1754 Minimum Inversion Number 线段树 单点更新
- HDU 1754:I Hate It(线段树-单点更新)
- HDU1754线段树单点更新区间查询(数组版)
- hdu 1754 线段树 单点更新 水
- hdu1754 线段树(查找和单点更新)
- hdu 1754线段树单点更新
- hdu 1754 I Hate It(线段树,单点更新)
- [ACM] hdu 1754 I Hate It (线段树,单点更新)
- [ACM] hdu 1754 I Hate It (线段树,单点更新)
- hdu 1754 I Hate It 线段树 单点更新 求区间最值
- 线段树 hdu 1754 I Hate It 单点更新 区间求最值
- 线段树 hdu 1754 I Hate It 单点更新 区间求最值
- [ACM] hdu 1754 I Hate It (线段树,单点更新)
- HDU 1754 I Hate It [线段树-单点更新]
- hdu 1754 I Hate It 线段树单点更新
- HDU1754(I hate it!--线段树单点更新,查找最大值)
- 线段树(单点更新) 之 hdu 1754