博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hdu-6119 小小粉丝度度熊 尺取
阅读量:6818 次
发布时间:2019-06-26

本文共 1331 字,大约阅读时间需要 4 分钟。

题意:在一大段时间里,告诉你,你签到了哪些区间,现在再给你m张补签卡,问你最多能实现连续签到多少天

题解:那些时间区间是有重叠的,所以我们先排序离散,并得到哪些区间是可以补签的,这样问题就变成,签过的天是0,没签过的是1,然后问区间和<=m的最大长度是多少,就转换为差不多一样的问题了(长度最长与最短)。

1 #include
2 #define N 100010 3 using namespace std; 4 struct rec 5 { 6 int l, r; 7 bool operator < (const rec &a) const 8 { 9 if (l != a.l) return l < a.l;10 return r < a.r;11 }12 }b[N],a[N];13 int ans,n,m,cnt;14 int main()15 {16 while (scanf("%d %d", &n, &m)!=EOF) 17 {18 for (int i=1;i<=n;i++) scanf("%d%d",&a[i].l,&a[i].r);19 sort(a+1,a+n+1);20 b[1]=a[1];21 cnt=1;22 for (int i=2;i<=n;i++)23 if (a[i].l<=b[cnt].r || a[i].l-b[cnt].r==1)24 b[cnt].r=max(b[cnt].r,a[i].r);else 25 {26 cnt++; 27 b[cnt]=a[i];28 }29 ans=0;30 for (int l=1,r=1;r<=cnt;r++)31 {32 if (r!=1) 33 {34 m-=b[r].l-b[r-1].r-1;35 while (m<0) 36 {37 m+=b[l+1].l-b[l].r-1;38 l++;39 }40 }41 ans=max(ans,b[r].r-b[l].l+1+m);42 }43 printf("%d\n", ans);44 }45 return 0;46 }

 

转载于:https://www.cnblogs.com/qywhy/p/9692472.html

你可能感兴趣的文章
三阶魔方中心块调整配方和记忆方法
查看>>
***微信LBS地理位置开发+百度地图API(地理位置和坐标转换)
查看>>
如何获得WPA握手包&EWSA破解WPA密码教程[zz]
查看>>
CountDownTimer,0,0
查看>>
mac 终端 常用命令
查看>>
对VM挂载新加入的磁盘
查看>>
MyEclipse *的安装步骤和破解(32位和64位皆适用)(图文详解)
查看>>
如何撤销 PhpStorm/Clion 等 JetBrains 产品的 “Mark as Plain Text” 操作 ?
查看>>
使用maven创建web项目
查看>>
第三十八章 springboot+docker(maven)
查看>>
构建单页面应用
查看>>
BZOJ4078 : [Wf2014]Metal Processing Plant
查看>>
变量的数据类型的转换
查看>>
codevs1022 覆盖[Hungary 二分图最大匹配]
查看>>
Deci and Centi Seconds parsing in java
查看>>
ES mlockall作用——preventing that memory from being paged to the swap area
查看>>
How those spring enable annotations work--转
查看>>
【SFTP】使用Jsch实现Sftp文件下载-支持断点续传和进程监控
查看>>
Mac系统中各个文件夹简单介绍(转)
查看>>
流媒体技术学习笔记之(八)海康、大华IpCamera RTSP地址和格式
查看>>