【9018:1060】最长的白色段

1060: 最长的白色段

时间限制: 1 Sec  内存限制: 128 MB
提交: 340  解决: 93
[提交][状态][讨论版]

题目描述

有一段从0到1000000000的数轴,它开始的颜色是白色。现在有人不断把其中的一段染成黑色或白色,总共染了N段(1≤N≤5000)。你的任务是编写一个程序,找出最后最长的白色段。

输入

第一行只有一个数N,接下来的N行是每次染一段的信息,格式为:ai,bi,ci。

ai,bi是整数,ci是符号’b’或’w’,三者用空格隔开,表示这次从ai染到bi,用的颜色为ci(’b’表示黑色,’w’表示白色),你可以认为0<ai≤bi<1000000000。

输出

仅两个数x,y(x<y),用空格隔开,表示最长的白色段。如果有多个解,则输出x最小的解。

样例输入

4
1 999999997 b
40 300 w
300 634 w
43 47 b

样例输出

47 634

题解:n久以前的题,离散化+二分即可。

代码如下:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 using namespace std;
 5 int n,a[10002],ans,ansx,ansy;
 6 bool col[10002];
 7 struct linet{int x,y;char c;}seq[5001];
 8 void init(){
 9     scanf("%d",&n);
10     col[2*n+1]=1;
11     for(int i=1;i<=n;i++){
12         scanf("%d %d %c",&seq[i].x,&seq[i].y,&seq[i].c);
13         a[2*i-1]=seq[i].x; a[2*i]=seq[i].y;
14     }
15     a[0]=0; a[2*n+1]=1000000000;
16     sort(a,a+2*n+2);
17 }
18 int bs(int l,int r,int key){
19     if(l>r) return 0;
20     int mid=(l+r)>>1;
21     if(a[mid]==key){
22         if(mid-1>=0&&a[mid-1]==key) return bs(l,mid-1,key);
23         else return mid;
24     }
25     if(a[mid]>key) return bs(l,mid-1,key);
26     else return bs(mid+1,r,key);
27 }
28 int main()
29 {
30     init();
31     for(int i=1;i<=n;i++){
32         int xx=bs(0,2*n+1,seq[i].x),yy=bs(0,2*n+1,seq[i].y);
33         for(int j=xx;j<yy;j++) col[j]=(seq[i].c==‘w‘?0:1);
34     }
35     for(int i=0;i<2*n+1;i++){
36         if(!col[i]){
37             int tmp=i;
38             while(i+1<=2*n+1&&!col[i+1]) i++;
39             if(a[i+1]-a[tmp]>ans){
40                 ans=a[i+1]-a[tmp];
41                 ansx=a[tmp]; ansy=a[i+1];
42             }
43         }
44     }
45     printf("%d %d\n",ansx,ansy);
46     return 0;
47 }
时间: 2024-10-05 23:25:23

【9018:1060】最长的白色段的相关文章

从HR 到SBP其实还有很长的一段路要走

战略性业务伙伴 Strategic business partners 关于这本书,一般是因为好奇,从HR到BP的角色,再到这个SBP,其实是一段没有走过的很虚的过程,不过总归是需要灯塔,即使偶尔只是海市蜃楼.不过提到STRATEGE,不得不说到波特他老人家,整本书的感觉就是做SBP不能够单单做HR,从业务出发,从关系的建立,信任的取得和维护出发,更多的是提供一个通用的模型,不单单是在这方面的管理而已.1.四个概念:   三类工作(2/8):事务性---服务于个体.策略性---服务于员工的工作群

在一个无序整数数组中,找出连续增长片段最长的一段, 增长步长是1。Example: [3,2,4,5,6,1,9], 最长的是[4,5,6]

下面是我自己的编写的代码,感觉还能再优化. 希望有大神可以分享一下自己的解决方案 1 let arr = [3,2,1,14,5,5,8,1,2,3,4,5,6,76,7,1,2,9]; 2 3 function fn(arr){ 4 let temp = []; 5 let sub = []; 6 for ( let i = 0; i < arr.length; i++ ){ 7 if(arr[i]+1 === arr[i+1]){ 8 temp.push(arr[i]); 9 }else{

HDU 1199 &amp;amp;&amp;amp; ZOJ 2301 线段树离散化

一段长度未知的线段.一种操作:a b c ,表示区间[a,b]涂为颜色C,w代表白色,b代表黑色,问终于的最长连续白色段,输出起始位置和终止位置 离散化处理.和寻常的离散化不同,须要把点化成线段.左闭右开,即对于一段区间[a.b],转化成区间[a,b+1) #include "stdio.h" #include "string.h" #include "algorithm" using namespace std; struct node { i

HDU 1199 &amp;&amp; ZOJ 2301 线段树离散化

一段长度未知的线段,一种操作:a b c ,表示区间[a,b]涂为颜色C,w代表白色,b代表黑色,问最终的最长连续白色段,输出起始位置和终止位置 离散化处理,和平常的离散化不同,需要把点化成线段,左闭右开,即对于一段区间[a,b],转化成区间[a,b+1) #include "stdio.h" #include "string.h" #include "algorithm" using namespace std; struct node { i

专访黄勇:Java在未来的很长一段时间仍是主流(把老板当情人,把同事当小孩,把客户当病人)

url:http://www.csdn.net/article/2015-09-06/2825621 2015-09-06 13:18 摘要:本文采访了现任阿里巴巴公司系统架构师黄勇,从事近十年的JavaEE应用开发工作.采访内容包含了技术人生.IT职场.程序员.Java Web框架.研发管理.敏捷开发.开源等问题,希望你在技术这条路上不孤单. [编者按] 一个普通的技术人讲述不平凡的技术人生路.黄勇,在工作十年后,写了一本书:<架构探险——从零开始写Java Web框架>,这本书是给他十年技

掘金之路道阻且长,衍生品市场如何走向正轨?

衍生品指泛娱乐产品文学.电影.动漫画.游戏等版权作品授权使用其原创角色形象或者作品元素设计.开发的商品,常见的比如挂饰.毛绒抱枕.手办等.在LIMA(全球特许授权商品联合会)的调查报告中,特许授权商品包含除了娱乐业及其角色形象商品外,还有含企业LOGO的商品.时装.体育.出版.明星.音乐.技术及非营利性特许商品.在欧美.日本等国家,电影.动画等衍生品市场早已形成了成熟的产业链,据公开数据显示衍生品创造的效益可以高达一部作品总收入的70%以上,国内的衍生品市场也被估值有千亿的规模. 动画电影<大圣

jQuery实现长文字部分显示代码

在网页上只有一个小区域,但是说明性的文字又很长,下面这段脚本实现的是长文字的部分显示,有类似需求的朋友可以参考下哈,希望对你有所帮助 在网页上只有一个小区域,但是说明性的文字又很长,下面这段脚本实现的是长文字的部分显示. 当用户点击展开时,文字展开,合起是文字合起. 本来用jQuery自带的toggle()就可以写,但是我做的时候 toggle一直不work,所以就用了click + 标志位来做的 ? <script language="javascript" src="

最长公共子串与最长公共子序列之间的关系

最近工作中需要写一个算法,而写完这个算法我却发现了一个很有意思的事情.需要的这个算法是这样的:对于A,B两个字符串,找出最多K个公共子串,使得这K个子串长度和最大.一开始想了一些乱七八糟的想法. 错误想法1:比如每次找最长公共子串,找到一个子串后,从A,B两个字符串中删除这个子串,之后在剩下的串中再找最长公共子串,像这样找K次.但是可惜是错误的. 举个反例: A=KABCDELMABCDEFGNFGHIJK B=KABCDEFGHIJK K=2 按照这种方式选取结果为:ABCDEFG+HIJK,

URL长链接转换为短链接

URL长链接转换为段链接的工具很多,但是,小编还是要给大家唠一种方法的: 操作步骤如下,打开腾讯微博或者其他微,将自己的URL地址值按图片操作: 版权声明:本文为博主原创文章,未经博主允许不得转载.