hdu1556 D
来源:互联网 发布:怎么能让淘宝店铺靠前 编辑:程序博客网 时间:2024/06/05 02:39
题目:
N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗?Input 每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <= N)。
当N = 0,输入结束。 Output 每个测试实例输出一行,包括N个整数,第I个数代表第I个气球总共被涂色的次数。 Sample Input Sample Output 1 1 1 3 2 1
树状数组的区间更新单点查询.当给区间(l,r)的气球染色时可以将l后面的所有数+1将r+1后面的所有数-1,这样当你想要但点查询时x点直接query(x)得到前x的和就是x这个点被染色的次数.
当N = 0,输入结束。
31 12 23 331 11 21 30
代码:
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<string>#include<vector>#include<stack>#include<bitset>#include<cstdlib>#include<cmath>#include<set>#include<list>#include<deque>#include<map>#include<queue>using namespace std;typedef long long ll;const double PI = acos(-1.0);const double eps = 1e-6;const int INF = 1000000000;const int maxn = 123467;int T,n,m;int ball[maxn];int lowbit(int x){ return x&(-x);}int query_sum(int x){ int sum=0; while(x>0) { sum+=ball[x]; x-=lowbit(x); } return sum;}void update(int x, int v){ while(x<=n) { ball[x]+=v; x+=lowbit(x); }}int main(){ while(scanf("%d",&n)&&n) { memset(ball,0,sizeof(ball)); for(int i=0;i<n;i++) { int a,b; scanf("%d%d",&a,&b); update(a,1); update(b+1,-1); for(int i=1;i<=2*n;i++) printf("%d\t",ball[i]); } printf("%d",query_sum(1)); for(int i=2;i<=n;i++) { printf(" %d",query_sum(i)); } printf("\n"); } return 0;}
阅读全文
0 0
- hdu1556 D
- hdu1556
- hdu1556
- hdu1556
- HDU1556
- hdu1556
- hdu1556
- hdu1556
- HDU1556
- hdu1556
- HDU1556
- hdu1556
- HDU1556
- hdu1556题解
- HDU1556 线段树入门
- hdu1556 color the ball
- hdu1556树状数组
- hdu1556--树状数组
- antd mobile(四) highcharts集成---采用react-highcharts
- c++入门教程(十)
- java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream的处理
- 呃...这是一个看上去并不难的建模
- 关键字volatile
- hdu1556 D
- codeforces 839D(89/600)
- fiddler4使用教程
- 关于写书的那些读者问题.....
- zabbix3.2端口监控
- 从输入URL到浏览器显示页面发生了什么
- 下载到FPGA内的文件格式
- select 所有option
- hud 6097 Mindis(几何)