Color the ball(HDU1556)树状数组
生活随笔
收集整理的這篇文章主要介紹了
Color the ball(HDU1556)树状数组
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
每次對區間內氣球進行一次染色,求n次操作后后所有氣球染色次數。
樹狀數組,上下區間更新都可以,差別不大。
?
?
1.對于[x,y]區間,對第x-1位減1,第y位加1,之后向上統計
#include<bits/stdc++.h> using namespace std; const int maxn=100000+10; int ans[maxn],Tree[maxn],n; inline int lowbit(int x) //計算2^k {return (x&-x); } void add(int x,int value) {for(int i=x; i<maxn; i+=lowbit(i))Tree[i]+=value; } void up(int x,int val) {while(x>0){Tree[x]+=val;x-=lowbit(x);} } int get(int x) {int sum=0;while(x<=n){sum+=Tree[x];x+=lowbit(x);}return sum; } int main() {int x,y;while(~scanf("%d",&n)&&n){memset(Tree,0,sizeof(Tree));for(int i=0;i<n;i++){scanf("%d%d",&x,&y);up(y,1);up(x-1,-1);}for(int i=1;i<=n;i++)printf("%d%c",get(i),i==n?'\n':' ');}return 0; }View Code
2.對于[x,y]區間,對第y+1位減1,第x位加1,之后向下統計
#include<bits/stdc++.h> using namespace std; const int maxn=100000+10; int ans[maxn],Tree[maxn]; inline int lowbit(int x) //計算2^k {return (x&-x); } void add(int x,int value) {for(int i=x; i<maxn; i+=lowbit(i))Tree[i]+=value; } int get(int x) {int sum=0;for(int i=x; i>0; i-=lowbit(i))sum+=Tree[i];return sum; } int main() {int n,x,y;while(~scanf("%d",&n)&&n){memset(Tree,0,sizeof(Tree));for(int i=0;i<n;i++){scanf("%d%d",&x,&y);add(x,1);add(y+1,-1);}for(int i=1;i<=n;i++)printf("%d%c",get(i),i==n?'\n':' ');}return 0; }View Code
?
轉載于:https://www.cnblogs.com/weimeiyuer/p/8358335.html
總結
以上是生活随笔為你收集整理的Color the ball(HDU1556)树状数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电磁炉原价258元现价199元买一个电磁
- 下一篇: 试管婴儿一次多少钱啊?