首页 > 其他分享 >HDU 1556 Color the ball(树状数组区间更新)

HDU 1556 Color the ball(树状数组区间更新)

时间:2023-06-12 14:34:02浏览次数:39  
标签:HDU ball Color int add maxn ans 区间 include


题意:中文题

思路:一道区间更新,单点查询的裸题,用线段树做更好,因为还没看到所以这里用树状数组做。树状数组标记区间的方法很特别,比如给区间[a,b]内的气球涂颜色时,我们add(a,1),add(b+1,-1),单点查询的时候sum(x)就是x这个气球被涂色的总次数。建议先在纸上自己试一下看看,有点抽象,可以这样理解,如果更新区间[3,5],那么我等于在3这个点+1,代表从3之后所有的点都增加了1。然后我们在6这个点-1表示从6之后所有的点都减少了1。所以达到了一个平衡的效果。最终实际+1的区间只是区间[3,5]内的数。



#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <string>
#include <set>
#include <ctime>
#include <cmath>
#include <cctype>
using namespace std;
#define maxn 100000+100
#define LL long long
int cas=1,T;
int a[maxn];
int c[maxn];
int lowbit(int x)
{
	return x&(-x);
}
int sum(int i)
{
	int ans = 0;
	while (i)
	{
		ans +=c[i];
		i-=lowbit(i);
	}
	return ans;
}
void add(int i,int d)
{
	while (i<maxn)
	{
		c[i]+=d;
		i+=lowbit(i);
	}
}

int main()
{
	int n;
	while (scanf("%d",&n)!=EOF && n)
	{
		memset(c,0,sizeof(c));
		for (int i = 1;i<=n;i++)
        {
			int a,b;
			scanf("%d%d",&a,&b);
			add(a,1);
			add(b+1,-1);
		}
        printf("%d",sum(1));
		for (int i = 2;i<=n;i++)
			printf(" %d",sum(i));
		printf("\n");
	}
	//freopen("in","r",stdin);
	//scanf("%d",&T);
	//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
	return 0;
}




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



 






标签:HDU,ball,Color,int,add,maxn,ans,区间,include
From: https://blog.51cto.com/u_16156555/6462552

相关文章

  • hdu2084数塔(DP)
    思路:简单的数塔DP#include<stdio.h>#include<string.h>#include<algorithm>usingnamespacestd;inta[105][105],dp[105][105];intmain(){intt,n,i,j;scanf("%d",&t);while(t--){scanf("%d",......
  • HDU 5491 The Next(构造)
    题意:给你D(D<=2^31),s1和s2,求比D大的第一个数并且这个数二进制1的数目在[s1,s2]范围里,输出这个数思路:直接从D+1算起,如果1的数目>s2那就跳过,如果s1>sum1,那么就将这个数的低位s1-sum1个0补成1,那么就是最优的了#include<bits/stdc++.h>usingnamespacestd;#defineLLlonglongint......
  • HDU 5489 Removed Interval(DP)
    题意:求去掉某一个长度为L的子串的LIS思路:画画图其实比较显然的想法是去掉这个区间的时候答案是右边以第一个数开头的LIS+左边最后一个数小于右边第一个数的LIS,为什么是右边以第一个数开头的LIS呢,因为如果是在这个L的后第二个是最佳答案的话那么我在这个“窗口”滑到L+1这个位置的时......
  • HDU 5492 Find a path(DP)
    思路:将式子化开其实就是求(n+m-1)*s1-s2的最小值,s1表示各个格子的平方和,s2表示和的平方,留意到数据范围较小,令dp[i][j][k]为走到第i行第j列当前和为k的平方和的最小值,最后答案就是(n+m-1)*dp[i][j][k]-k*k#include<bits/stdc++.h>usingnamespacestd;#defineinf1e9inta[33][3......
  • Python 绘图 colorbar 隐藏刻度保留标签 (颜色刻度 和标签刻度 两个)
      ax3=fig.add_axes(config['setpng']['colorbar'])#四个参数分别是左、下、宽、长  cb3=mpl.colorbar.ColorbarBase(ax3,cmap=_cmap,norm=norm)  #set_colorbar_ticks(cb3,levels,config['levels']['wind_s_label'])#色标刻度调整  ......
  • [Codeforces Round 876 (Div. 2)][Codeforces 1839D. Ball Sorting]
    题目链接:D-BallSorting题目大意:需要对一个排列按照指定操作进行排序。操作一:在数字间插入一个特殊点,可执行不超过\(k\)次;操作二:将在特殊点旁的数移动到任意位置。所有操作结束后特殊点会消失,要求对所有\(k\in[1,n]\),求出操作二的最少操作次数。分析题意可以得出,操作一放......
  • HDU 5437 Alisha’s Party(优先队列模拟)
    思路:题目比较好懂的模拟题,用一个优先队列即可     模拟的时候要注意最后还会再开一次门,把剩下的人全部放进来,开门的时间并不一定是递增的,要自己排个序,还有就是要注意开门的时候是25这种数据,就是到第二个人到了开门,然后可以放5个人进来,这样不处理的话会RE#include<bits/s......
  • prefers-color-scheme与color-scheme自由切换网站主题背景色变化
    部分转自:布依前端和前端侦探prefers-color-schemeprefers-color-scheme这个新的css特性,想必大家并不陌生,写文章的目的就是分享给大家怎么正确用好它以及提升网站用户体验。prefers-color-scheme是CSS 媒体特性【@media】用于检测用户是否有将操作系统的主题色设置为亮色【light】......
  • SC-FEGAN: Face Editing Generative Adversarial Network with User’s Sketch and Co
    SC-FEGAN:FaceEditingGenerativeAdversarialNetworkwithUser’sSketchandColorhttps://github.com/run-youngjoo/SC-FEGANhttps://arxiv.org/abs/1902.06838基于GAN的人脸编辑,效果非常好,应用点非常新颖。总的来说,效果非常好,包括很多细节都能够进行编辑。就创新点来讲,就是......
  • HDU - 5253 连接的管道 (卡鲁斯卡尔)最小生成树
    TimeLimit: 1000MS MemoryLimit: 32768KB 64bitIOFormat: %I64d&%I64uHDU-5253连接的管道Submit StatusDescription老Jack有一片农田,以往几年都是靠天吃饭的。但是今年老天格外的不开眼,大旱。所以老Jack决定用管道将他的所有相邻的农田全部都串联起......