【HDOJ】1556 Color the ball
2014-10-09 23:12
423 查看
解法一:线段树, 延迟更新.
解法二:树状数组
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> using namespace std; #define MAXN 100001 #define lson l, mid, rt<<1 #define rson mid+1, r, rt<<1|1 int sum[MAXN<<2]; int delta[MAXN<<2]; void PushUp(int rt) { sum[rt] = sum[rt<<1] + sum[rt<<1|1]; } void PushDown(int rt, int n) { if (delta[rt]) { delta[rt<<1] += delta[rt]; delta[rt<<1|1] += delta[rt]; sum[rt<<1] += delta[rt] * (n - (n>>1)); sum[rt<<1|1] += delta[rt] * (n>>1); delta[rt] = 0; } } void build() { memset(sum, 0, sizeof(sum)); memset(delta, 0, sizeof(delta)); } void update(int ll, int rr, int l, int r, int rt) { if (ll<=l && rr>=r) { delta[rt]++; sum[rt] += r-l+1; return ; } PushDown(rt, r-l+1); int mid = (l+r)>>1; if (ll <= mid) update(ll, rr, lson); if (mid < rr) update(ll, rr, rson); PushUp(rt); } int query(int ll, int rr, int l, int r, int rt) { if (ll<=l && rr>=r) { return sum[rt]; } PushDown(rt, r-l+1); int mid = (l+r)>>1, ret = 0; if (ll <= mid) ret += query(ll, rr, lson); if (mid < rr) ret += query(ll, rr, rson); return ret; } int main() { int n, a, b; int i, tmp; while (scanf("%d", &n)!=EOF && n) { build(); for (i=0; i<n; ++i) { scanf("%d %d", &a, &b); update(a, b, 1, n, 1); } for (i=1; i<=n; ++i) { tmp = query(i, i, 1, n, 1); if (i != n) printf("%d ", tmp); else printf("%d\n", tmp); } } return 0; }
解法二:树状数组
#include <cstdio> #include <cstring> #define MAXN 100001 int sum[MAXN]; int n; int lowbit(int x) { return x&(-x); } void update(int x, int delta) { while (x <= n) { sum[x] += delta; x += lowbit(x); } } int getSum(int x) { int ret = 0; while (x > 0) { ret += sum[x]; x -= lowbit(x); } return ret; } int main() { int i, a, b; while (scanf("%d", &n)!=EOF && n) { memset(sum, 0, sizeof(sum)); for (i=1; i<=n; ++i) { scanf("%d %d", &a, &b); update(a, 1); update(b+1, -1); } for (i=1; i<=n; ++i) { int tmp = getSum(i); if (i != n) printf("%d ", tmp); else printf("%d\n", tmp); } } return 0; }
相关文章推荐
- HDOJ/HDU 1556 Color the ball(树状数组)
- hdoj 1556 Color the ball【线段树区间更新】
- hdoj 1556 Color the ball 【线段树 + lazy区间更新】 【树状数组】
- Color the ball----HDOJ1556
- HDOJ/HDU 1556 Color the ball(树状数组)
- 【HDOJ】1556 Color the ball
- HDOJ 1556 Color the ball 线段树 : 成段更新 单点查询
- HDOJ-1556 Color the ball
- HDOJ 1556 Color the ball (线段树+区间更新)
- HDOJ 1556 Color the ball(树状数组 & 线段树)
- hdoj 1556 Color the ball 【树状数组】
- HDOJ 1556 Color the ball
- hdoj-1556 Color the ball(树状数组)
- HDOJ 1556 Color the ball(树状数组模板)
- hdoj1556-Color the ball
- hdoj-1556-Color the ball
- HDOJ 1556 Color the ball(线段树 + 线状数组)
- hdoj 1556 Color the ball 【线段树】
- [HDOJ 1556] Color the ball(线段树成段更新入门)
- HDOJ 1556 Color the ball