HDU 1556(树状数组-区间修改,查询点)

原创 2013年12月04日 20:14:28

Color the ball

Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6752    Accepted Submission(s): 3534


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
 

Author
8600
 

Source
 


线段树写过,不过还是树状数组好写啊。。


/****************************************************
* author:crazy_石头
* Pro:HDU1556
* algorithm:树状数组
* Time:32ms
* Judge Status:Accepted
*******************************************************/
#pragma comment(linker, "/STACK:102400000,102400000")
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

#define rep(i,h,n) for(int i=(h);i<=(n);i++)
#define ms(a,b) memset((a),(b),sizeof(a))
#define eps 1e-8
#define INF 1<<29
#define LL __int64
const int maxn=200000+5;

int C[maxn],n,a[maxn];
inline int lowbit(int x)
{
    return x&(-x);
}

inline void update(int x,int num)
{
    while(x<=n)
    {
        C[x]+=num;
        x+=lowbit(x);
    }
}

inline int getsum(int x)
{
    int res=0;
    while(x>0)
    {
        res+=C[x];
        x-=lowbit(x);
    }
    return res;
}

int main()
{
    while(cin>>n&&n)
    {
        ms(C,0);
        int l,r;
        rep(i,1,n)
        {
            cin>>l>>r;
            update(l,1);
            update(r+1,-1);
        }
        rep(i,1,n)
        i==1?printf("%d",getsum(i)):printf(" %d",getsum(i));
        cout<<endl;
    }
    return 0;
}




树状数组的区间修改,单点查询

树状数组的区间修改
  • u013514722
  • u013514722
  • 2014年10月17日 21:49
  • 2655

树状数组 区间修改,单点查询;

https://www.luogu.org/problem/show?pid=3368#sub 线段树水题啊; 但是我们要学习树状数组; 树状数组水题啊; 首先假如我们会模版1; 其实我们发...
  • largecub233
  • largecub233
  • 2017年02月23日 10:54
  • 857

树状数组 --区间查询+区间修改

数据结构
  • FSAHFGSADHSAKNDAS
  • FSAHFGSADHSAKNDAS
  • 2016年09月24日 13:45
  • 3835

树状数组(单点修改区间查询、区间修改单点查询、区间修改区间查询)

Description如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和Input第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 ...
  • zars19
  • zars19
  • 2017年01月19日 22:28
  • 836

【小结】树状数组的区间修改与区间查询

第一次听到树状数组是zsl来讲课QAQ 然后当时他给我们绕了很久 = = 嗯没懂…………结果后来发现这东西实际上是个简单又好用的玩意QAQ [ 1 ]  树状数组的本职是单点修改+区间查询 维护前...
  • qq_21841245
  • qq_21841245
  • 2015年02月26日 21:46
  • 8462

POJ 2155 Matrix(二维树状数组+数组数组区间更新+单点查询)

Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row an...
  • qq_37497322
  • qq_37497322
  • 2017年07月26日 11:11
  • 247

【BZOJ 3110】 [Zjoi2013]K大数查询 整体二分+树状数组区间修改

额,只能说整体二分是一个很神奇的东西,首先既然是二分虽然加了一个整体听起来变得立马高大上起来,但是还是需要从最基本的二分思路出发才能理解。首先如果对于只有一次地查询操作的话我们很容易就可以想到二分的写...
  • pbihao
  • pbihao
  • 2016年12月07日 19:52
  • 464

利用差分实现的树状数组区间修改 区间求和

最开始和很不敢相信竟然树状数组还可以区间修改,既然常数这么小,而且好写易调的树状数组可以写区间修改了,那岂不美滋滋?所以我在网上查了查做法,竟然学会了??? Orz http://blog.csdn...
  • NOIAu
  • NOIAu
  • 2017年08月01日 15:17
  • 391

[树状数组] 区间求和的三种模型

树状数组在区间求和问题上有很高的效率,尤其在非常困难的比赛中(数据量大,对时间限制很严格的比赛)能发挥非常大的作用,其各种复杂度都要比线段树低很多,而且其代码简洁优美……有关区间求和,主要有以下三个模...
  • u012848631
  • u012848631
  • 2015年07月22日 22:06
  • 1636

树状数组求区间最大值

讲这个的博文已经不少了,但感觉不够详细不够通俗易懂,所以我尝试着更详细更通俗易懂的说一下我的理解。   这个算法只支持单点修改和区间查询最值。每一次维护和查询的时间复杂度都是O((logn)^2),但...
  • u010598215
  • u010598215
  • 2015年09月04日 10:42
  • 4855
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 1556(树状数组-区间修改,查询点)
举报原因:
原因补充:

(最多只允许输入30个字)