hdu

发布时间:2025-05-16 02:51

最新推荐文章于 2021-08-20 18:18:38 发布

小k安达 于 2017-12-02 12:19:35 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

Color the ball

Time Limit : 9000/3000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 17   Accepted Submission(s) : 13

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

题意:更新区间查点;

思路:树状数组,,左端点加1,在右端点后面减一。这样求和得到的就是这个点的染色次数了。

code:

#include<cstdio>

#include<cstring>

#define lowbit(x) (x&(x^(x-1)))

#define maxn 100000+10

using namespace std;

int c[maxn];

int n;

void update(int p,int x)

{

while(p<=n){

c[p]+=x;

p+=lowbit(p);

}

}

int sum(int p)

{

int sum=0;

while(p>0){

sum+=c[p];

p-=lowbit(p);

}

return sum;

}

int main()

{

while(scanf("%d",&n),n){

memset(c,0,sizeof(c));

int a,b;

for(int i=0;i<n;i++){

scanf("%d %d",&a,&b);

update(a,1);

update(b+1,-1);

}

for(int i=1;i<n;i++){

printf("%d ",sum(i));

}

printf("%d\n",sum(n));

}

return 0;

}

网址:hdu https://www.yuejiaxmz.com/news/view/976984

相关内容

【拓扑排序】HDU 1285 确定比赛名次
acm0基础入门题题解【不涉及算法】
日立全新嵌入式洗碗机上市,优雅生活近在咫尺
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(DP多重背包问题)
[ACM] HDU 2054 A == B?
HDU 2544 最短路 Dijkstra Flyod
HDU 2196(树形dp,n 个点的树上最长路)
计算机专业学生的成长之路:超越课堂的自我提升策略
关于斐波那契数列 组合错排问题和一些递推公式合集整理
Apollo深度磁盘清理

随便看看