HDU 1556 Color the ball (树状数组 区间更新+单点查询)
Problem Description
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
3
1 1
2 2
3 3
3
1 1
1 2
1 3
0
Sample Output
1 1 1
3 2 1
分析:
染色,每次染[a, b],然后查询所有1--n个节点每个节点被染得次数。。。
对更新[a, b],则将a位置加1就相当于将这个位置往后的地方全部加1了,然后将b+1位置减1就相当于将这个位置往后的位置都减1了,那下次查找的位置x如果在这个区间后面的话,肯定就没有被加1了,如果x在a与b的中间,则一定加1了。。。
代码:
#include <iostream>
#include<stdio.h>
#include<string.h>
#define maxn 100000 + 10
using namespace std;
int n,a,b,c[maxn];
int lowbit(int x)
{
    return x & (-x);
}
void update(int index,int val)
{
    for(int i = index; i <= n; i += lowbit(i))
        c[i] += val;
}
int  sum(int index)
{
    if(index == 0)
        return 0;
    int ans = 0;
    for(int i = index; i > 0; i -= lowbit(i))
        ans += c[i];
    return ans;
}
int main()
{
    while(~scanf("%d",&n) && n)
    {
        memset(c,0,sizeof(c));
        for(int i = 1; i <= n; i++)
        {
            scanf("%d %d",&a,&b);
            update(a,1);//对大于等于a的+1
            if(b + 1!= n + 1)//特判最后一个气球如果是不用减
                update(b + 1,-1);//对大于b的-1,实现a-b区间的气球都+1
        }
        for(int i = 1; i <= n; i++)
            printf(i == 1 ? "%d" : " %d", sum(i));//注意输出格式
        printf("\n");
    }
    return 0;
}
HDU 1556 Color the ball (树状数组 区间更新+单点查询)的更多相关文章
- HDU 1556 Color the ball (树状数组区间更新)
		水题,练习一下树状数组实现区间更新. 对于每个区间,区间左端点+1,右端点的后一位-1,查询每个位置的覆盖次数 #include <cstdio> #include <cstring ... 
- 【poj2155】Matrix(二维树状数组区间更新+单点查询)
		Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the ... 
- HDOJ/HDU 1556 Color the ball(树状数组)
		Problem Description N个气球排成一排,从左到右依次编号为1,2,3-.N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动车从 ... 
- HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)
		Attack Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) Total Sub ... 
- NBOJv2 1050 Just Go(线段树/树状数组区间更新单点查询)
		Problem 1050: Just Go Time Limits: 3000 MS Memory Limits: 65536 KB 64-bit interger IO format: % ... 
- hdu1556 树状数组区间更新单点查询板子
		就是裸的区间更新: 相对于直观的线段树的区间更新,树状数组的区间更新原理不太相同:由于数组中的一个结点控制的是一块区间,当遇到更新[l,r]时,先将所有能控制到 l 的结点给更新了,这样一来就是一下子 ... 
- hdu3966 树链剖分点权模板+线段树区间更新/树状数组区间更新单点查询
		点权树的模板题,另外发现树状数组也是可以区间更新的.. 注意在对链进行操作时方向不要搞错 线段树版本 #include<bits/stdc++.h> using namespace std ... 
- HDU 1556 Color the ball 树状数组 题解
		Problem Description N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动 ... 
- 【树状数组区间修改单点查询】HDU  4031 Attack
		http://acm.hdu.edu.cn/showproblem.php?pid=4031 [题意] 有一个长为n的长城,进行q次操作,d为防护罩的冷却时间,Attack表示区间a-b的墙将在1秒后 ... 
随机推荐
- Hadoop初探
			本文转自:https://blog.csdn.net/column/details/14334.html 前言 Hadoop是什么? 用百科上的话说:“Hadoop是一个由Apache基金会所开发的分 ... 
- 佣金维护测试sql
			SELECT bmc.memberid , case then decode(bmc.source, , , 'TOPfitIBL') ELSE decode(bmc.source, , , 'TOP ... 
- TestNG+Excel+(HTTP+JSON) 简单接口测试
			说明: 1.使用Exce作为数据存放地: 2.使用TestNG的Datarprovide 做数据供应: 3.不足的地方没有指定明确的result_code , error_code , ERROR_M ... 
- python & dict & switch
			python & dict & switch python 中是没用switch语句的,这应该是体现python大道至简的思想,python中一般多用字典来代替switch来实现. # ... 
- React之智能组件和木偶组件
			智能组件 VS 木偶组件 在 React + Redux 结合作为前端框架的时候,提出了一个将组件分为“智能”和“木偶”两种 智能组件:它是数据的所有者,它拥有数据.且拥有操作数据的action,但是 ... 
- hdu6446 Tree and Permutation
			没啥好说的,拆一下贡献就完事了.记dis(x,y)为树上x到y的最短路径,设长度为n的排列中有f(n)个里面x和y相邻(不考虑x和y的顺序),那么f(n)=(n-2)! (n-1) 2,显然这个f(n ... 
- SecureCRT8.1下载+注册机+破解教程
			[下载]下载SecureCRT + SecureFX 8.1 Bundle版本软件,官网下载较麻烦,因此在此提供百度云连接. 链接:http://pan.baidu.com/s/1hsIjtSK 密码 ... 
- BZOJ5289 HNOI/AHOI2018排列(贪心+堆)
			题面描述的相当绕,其实就是如果ai=j,重排后ai要在aj之后.同时每个ai有附属属性wi,要求最大化重排后的Σiwi. 容易发现这事实上构成一张图,即由j向i连边.由于每个点入度为1或0,该图是基环 ... 
- 【刷题】BZOJ 5418 [Noi2018]屠龙勇士
			www.lydsy.com/JudgeOnline/upload/noi2018day2.pdf Solution 将攻击的式子列出来,\(atk \times x-p \times y=a_i\) ... 
- Linux进程间通信(消息队列/信号量+共享内存)
			写在前面 不得不说,Deadline果真是第一生产力.不过做出来的东西真的是不堪入目,于是又花了一早上重写代码. 实验内容 进程通信的邮箱方式由操作系统提供形如 send()和 receive()的系 ... 
