hdu 1754 I Hate It(数据结构:线段树)
2014-08-01 10:23
399 查看
基础线段树应用,把模板稍微改下就可以了
代码如下:
代码如下:
#include <cstdio> #include <iostream> #include <algorithm> #define MAXN 200010 #define LL long long using namespace std; int sum[MAXN<<2]; void pushUp(int rt) { sum[rt] = max(sum[rt<<1], sum[rt<<1|1]); } void build(int l, int r, int rt) { if(l == r) { scanf("%d", &sum[rt]); return ; } int m = (l+r)>>1; build(l, m, rt<<1); build(m+1, r, rt<<1|1); pushUp(rt); } void update(int p, int add, int l, int r, int rt) { if(l == r) { sum[rt] = add; return ; } int m = (l+r)>>1; if(p <= m) update(p, add, l, m, rt<<1); else update(p, add, m+1, r, rt<<1|1); pushUp(rt); } int query(int L, int R, int l, int r, int rt) { if(L<=l && r<=R) { return sum[rt]; } int m = (l+r)>>1; int ret = 0; if(L <= m) ret = max(ret, query(L, R, l, m, rt<<1)); if(R > m) { ret = max(ret, query(L, R, m+1, r, rt<<1|1)); } return ret; } int main(void) { int m, n, a, b; char ch; while(scanf("%d%d", &n, &m) != EOF) { build(1, n, 1); while(m--) { scanf(" %c", &ch); scanf("%d%d", &a, &b); if(ch == 'Q') { cout << query(a, b, 1, n, 1) << endl; } else { update(a, b, 1, n, 1); } } } return 0; }
相关文章推荐
- 数据结构_线段树_例题_ I Hate It(HDU 1754)
- 【解题报告】 HDU 1754 I Hate It 线段树 单点更新
- HDU 1754 I Hate It(线段树版)
- HDU 1754 I Hate It(线段树) 2984MS水过
- hdu 1754 I Hate It (线段树入门题、求区间段的最大值)
- HDU 1754 I Hate It(线段树)
- HDU--1754 -- I Hate It [线段树]
- HDU 1754 I Hate It 线段树
- HDU1754 I Hate It(树状数组 or 线段树)
- 线段树专辑——hdu 1754 I Hate It
- HDU 1754:I Hate It_线段树
- 线段树 hdu 1754 I Hate It
- hdu 1754 -- I Hate It (线段树)
- HDU 1754 I Hate It(线段树)
- hdu 1754 I hate it(线段树)
- hdu1754_I Hate It(线段树)
- hdu - 1754 - I Hate It(线段树(单点更新))
- hdu 1754 I Hate It 线段树最基本类型
- HDU 1754 I Hate It(线段树)
- hdu 1754 I Hate It(线段树)