Color the ball

Color the ball

Time Limit : 9000/3000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 30   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

 

Author
8600

 

Source
HDU 2006-12 Programming Contest
线段树的基础题,需要对区间的一次更新:
#include <stdio.h>
#include <stdlib.h>struct Line
{int Left,Right;int Max;
};
struct Line ID[600000];
int Len;
void Build(int l,int r,int n)
{int Mid=(l+r)/2;ID[n].Left=l;ID[n].Right=r;ID[n].Max=0;if (l==r) return;Build(l,Mid,2*n);Build(Mid+1,r,2*n+1);
}void Ouput(int l,int r,int n,int sum)
{int Mid=(l+r)/2;if(ID[n].Left==ID[n].Right){printf("%d",sum+ID[n].Max);if(ID[n].Left!=Len)putchar(' ');return;}if(ID[n].Max!=0){Ouput(l,Mid,2*n,sum+ID[n].Max);Ouput(Mid+1,r,2*n+1,sum+ID[n].Max);}else{Ouput(l,Mid,2*n,sum);Ouput(Mid+1,r,2*n+1,sum);}}void Search(int r,int l,int Step)
{int Mid;if (r==ID[Step].Left && l==ID[Step].Right){ID[Step].Max++;return;}Mid=(ID[Step].Left+ID[Step].Right)/2;if (Mid>=l)    Search(r,l,Step*2);else if (Mid<r)    Search(r,l,Step*2+1);else{Search(r,Mid,Step*2);Search(Mid+1,l,Step*2+1);}
}int main()
{int N,a,b,T;while(scanf("%d",&N)!=EOF){if(N==0)break;T=N,Len=N;Build(1,N,1);while(T--){scanf("%d%d",&a,&b);Search(a,b,1);}Ouput(1,N,1,0);putchar('\n');}return 0;
}
View Code

 修改:2015.5.15

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <algorithm>
 5 using namespace std;
 6 typedef struct Line
 7 {
 8     int Left,Right;
 9     int Key;/*关键值*/
10     int Times;/*计数器*/
11 }LR;
12 LR ID[1008600];/*每一个节点都需要一个存储*/
13 int Len;
14 
15 void Build(int L,int R,int n)    /*输入时建立二叉树根*/
16 {
17     int Mid=(L+R)/2;
18     ID[n].Left=L;ID[n].Right=R;
19     ID[n].Key=0;ID[n].Times=0;/*初始化为0*/
20     if (L==R)return;    /*找到根节点的时候结束*/
21     Build(L,Mid,2*n);
22     Build(Mid+1,R,2*n+1);
23 }
24 void Search(int L,int R,int Step)/*匹配区间*/
25 {
26     int Mid;
27     if(L==ID[Step].Left && R==ID[Step].Right)
28     {ID[Step].Times++;return;}/*记录累计次数*/
29     Mid=(ID[Step].Left+ID[Step].Right)/2;
30     if (Mid>=R)     Search(L,R,Step*2);
31     else if (Mid<L)    Search(L,R,Step*2+1);
32     else
33     {
34         Search(L,Mid,Step*2);
35         Search(Mid+1,R,Step*2+1);
36     }
37 }
38 void UpData_S(int L,int R,int Step,int sum)/*一步更新*/
39 {                                          /*初始化为UpData_S(1,N,1,0);*/
40     int Mid;
41     if(L==R)
42     {
43         ID[Step].Key=sum+ID[Step].Times;/*单点求和*/
44         printf("%d",ID[Step].Key);/*输出该点的关键值*/
45         if(L!=Len)putchar(' ');
46         else putchar(10);
47         return ;
48     }
49     Mid=(ID[Step].Left+ID[Step].Right)/2;
50     UpData_S(L,Mid,Step*2,sum+ID[Step].Times);
51     UpData_S(Mid+1,R,Step*2+1,sum+ID[Step].Times);
52 }
53 int main()
54 {
55     int N,i,a,b;
56     while(scanf("%d",&N)&&N)/*输入N,表示1~N区间*/
57     {
58         Len=N;
59         Build(1,N,1);
60         for(i=0;i<N;i++)
61         {
62             scanf("%d%d",&a,&b);
63             Search(a,b,1);/*对区间[a,b]计数器++*/
64         }
65         UpData_S(1,N,1,0);/*一步更新所有关键值*/
66     }
67     return 0;
68 }
View Code

 更新模板:2016.4.14

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <algorithm>
 5 #define MaxN 1008600
 6 using namespace std;
 7 int Len;
 8 struct Node{int L,R,Key,Add;}ID[MaxN];/*每一个节点都需要一个存储*/
 9 void Down_Date(int n){/*向下更新*/
10     if(ID[n].Add!=0){
11         ID[2*n].Add+=ID[n].Add;
12         ID[2*n+1].Add+=ID[n].Add;
13         ID[n].Key+=(ID[n].R-ID[n].L+1)*ID[n].Add;
14         ID[n].Add=0;
15     }
16 }
17 void Build(int L,int R,int n)/*输入时建立二叉树根,Build(1,N,1)*/
18 {
19     ID[n].L=L;ID[n].R=R;
20     ID[n].Add=0;ID[n].Key=0;
21     if (L==R){return;}
22     int Mid=(L+R)/2;
23     Build(L,Mid,2*n);Build(Mid+1,R,2*n+1);
24 }
25 
26 void UpDate_L(int L,int R,int n,int v)/*区间更新,区间加减*/
27 {
28     if(L==ID[n].L && R==ID[n].R){
29         ID[n].Add+=v;return ;
30     }
31     ID[n].Key+=v*(R-L+1);/*不匹配区间的时候,直接改变关键值*/
32     Down_Date(n);/*可以每次更新,提高效率*/
33     int Mid=(ID[n].L+ID[n].R)/2;
34     if (Mid>=R) UpDate_L(L,R,n*2,v);
35     else if (Mid<L) UpDate_L(L,R,n*2+1,v);
36     else{
37         UpDate_L(L,Mid,n*2,v);
38         UpDate_L(Mid+1,R,n*2+1,v);
39     }
40 }
41 
42 void Query_All(int L,int R,int n)/*询问所有点*/
43 {
44     if(L==R){
45         printf("%d",ID[n].Key+ID[n].Add);
46         if(L==Len)putchar(10);
47         else putchar(32);
48         return ;
49     }
50     Down_Date(n);
51     int Mid=(ID[n].L+ID[n].R)/2;
52     if (Mid>=R) Query_All(L,R,n*2);
53     else if (Mid<L) Query_All(L,R,n*2+1);
54     else{
55        Query_All(L,Mid,n*2);
56        Query_All(Mid+1,R,n*2+1);
57     }
58 }
59 
60 int main()
61 {
62     char Str;
63     int T,t=1,N,M,A,B,i;
64     while(scanf("%d",&N)&&N)
65     {
66         Build(1,N,1);Len=N;
67         for(i=0;i<N;i++){
68             scanf("%d%d",&A,&B);
69             UpDate_L(A,B,1,1);
70         }
71         Query_All(1,N,1);
72     }
73     return 0;
74 }
View Code

 

转载于:https://www.cnblogs.com/Wurq/articles/3869944.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqlite字段是否存在_【漏洞预警】Linux内核存在本地提权漏洞(CVE20198912)

更多资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)漏洞背景近日&#xff0c;Linux git中发布一个commit补丁&#xff0c;该补丁对应的漏洞是一个本地提权漏洞CVE-2019-8912&#xff0c;漏洞影响范围较广。根据git中的commit信息可知&#xf…

WPF 实现倒计时转场动画~

元旦元旦团团圆圆、WPF开发者在此真诚的祝愿开发者们在新的一年里心想事成、万事如意!WPF开发者QQ群&#xff1a; 340500857由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 PS&#xff1a;有更好的方式欢迎推荐。01—代码如下一…

数字化架构

看过《EA企业架构》、《应用架构》和《IT与业务之间的鸿沟》文章的好多朋友给我发信息&#xff0c;能不能再写篇文章&#xff0c;各行各业的朋友都能看懂的、容易接受的&#xff0c;下面我将尽量尝试朝着这个方向努力写一篇数字化架构的文章&#xff0c;希望各界的朋友们都能有…

快速理解ASP.NET Core的认证与授权

ASP.NET Core的认证与授权已经不是什么新鲜事了&#xff0c;微软官方的文档对于如何在ASP.NET Core中实现认证与授权有着非常详细深入的介绍。但有时候在开发过程中&#xff0c;我们也往往会感觉无从下手&#xff0c;或者由于一开始没有进行认证授权机制的设计与规划&#xff0…

字符用_连接的是什么加密_防水连接器外壳与铜针表面涂层有什么用?

防水连接器外壳与铜针表面涂层会关系到产品的质量&#xff0c;毕竟材料选择方面&#xff0c;以及手工劳动方面都是需要把好关的&#xff0c;这样我们才能确保做出来了的产品送至用户身上是最好的。(凌科BD系列防水连接器铜针镀金效果)1、无氰偏碱亮铜&#xff1a;在铜合金材料防…

【27前端】base标签带有href属性会让chrome里的svg元素url失效

一个chrome的问题&#xff0c;但具体原因不明。 触发条件&#xff1a;chrome浏览器base标签里href属性有值的时候 触发问题&#xff1a;svg里面的元素如果有用url的滤镜和模糊&#xff0c;则会失效&#xff0c;在firefox里和IE10没有发现这个问题。 正常状态&#xff1a; 有bas…

强大的矩阵奇异值分解(SVD)及其应用

本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用&#xff0c;但请注明出处&#xff0c;如果有问题&#xff0c;请联系wheeleastgmail.com 前言&#xff1a; 上一次写了关于PCA与LDA的文章&#xff0c;PCA的实现一般有两种&#xff0…

已婚男人看见美女都这个眼神?

1 答应我&#xff1a;穿汉服晚上就别骑车了&#xff01;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 真香定理从来不迟到▼3 这万圣节大餐吃得下去吗&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 这...也灵活了吧&#xff1f;▼5 谁…

一个程序如何连接到外网_如何开发制作小程序?做一个电商带直播小程序

开发制作小程序可以让商家更方便地引流获客、增加线上订单。尤其是今年小程序直播大火&#xff0c;商家有了新的运营私域流量的利器&#xff0c;因此做一个电商带直播功能的小程序是很有用的。如何开发一个这样的小程序呢&#xff1f;流程如下&#xff1a;在「上线了」sxl.cn注…

推荐:Flowchart 一种通过文本方式描述的流程图

流程图&#xff08;Flowchart&#xff09;&#xff1a;使用图形表示算法的思路是一种极好的方法&#xff0c;因为千言万语不如一张图。流程图在汇编语言和早期的BASIC语言环境中得到应用。相关的还有一种PAD图&#xff0c;对PASCAL或C语言都极适用。Flowchart 是一种通过文本方…

thinkpad如何屏蔽bios更新 提示电池_有种血赚叫“二手”!3000搞定原价万元ThinkPad小黑本,真省钱...

你会为买种草已久笔记本剁手吗&#xff1f;在这不容易的2020年上半年&#xff0c;准备剁手买新电脑之前都得犹豫好几天吧&#xff0c;毕竟大家的钱包都收紧了。就连闲鱼上带有“年会奖品”、“刚买的老婆让退货”标签的东西都少了&#xff0c;各家厂商推出的新品也都在走极致性…

转载集合

本页链接均可单机跳转&#xff0c;网址过长的只给出超链接 背包九讲 pdfhttps://github.com/tianyicui/pack/blob/master/V2.pdf wzk线段树笔记http://wyfcyx.logdown.com/posts/201802-summary-data-structures-zkw-segment-tree-details 1 #include<cstdio>2 #include&…

c#屏幕录制(经典)(含源码和AForge.Video.FFMPEG.DLL)及填坑办法

一直觉得.net在多媒体处理方面渣得不行。最近需要做一个摄像头的程序&#xff0c;为了方便&#xff0c;用了AForge这个开源项目。AForge项目中有AForge.Video和AForge.Video. DirectShow这两个子项目&#xff0c;可以方便的调用摄像头。但是这两个项目最终只能取得视频帧&#…

drawable文件怎么添加图片_怎么给PDF文件添加书签

现如今我们使用的电子文档逐步都被PDF取代&#xff0c;虽然PDF有很多好处&#xff0c;但相较Word文档打开就能随意修改不同&#xff0c;PDF并不能直接编辑。比如有时我们要给PDF添加书签&#xff0c;这样可以快速找到要的页面&#xff0c;要怎么操作呢&#xff1f;一说到PDF的任…

通过Rancher Desktop在桌面上运行K8s

Rancher 发行的操作系统新选择&#xff1a;Rancher Desktop for Windows&#xff0c;它可以帮助你在Windows桌面上管理Kubernetes和容器。当然他当然会支持Linux&#xff0c;Mac的。准备工作在我们探索全新的Rancher Desktop之前&#xff0c;我们需要准备以下内容&#xff1a;1…

数学家排名,高斯第二牛顿第三?!看完第一的简历,他果然比牛顿还牛逼.........

如果让你给数学家排名&#xff0c;你会怎么排&#xff1f;谁排第一&#xff1f;高斯&#xff1f;阿基米德&#xff1f;还是其他哪位数学神仙&#xff1f;今天早上超模君发现&#xff0c;在国内某排行网站上&#xff0c;由网友投票选出来“世界十大数学家”里&#xff0c;名列前…