【二分+尺取】HDU 6119 小小粉丝度度熊
http://acm.hdu.edu.cn/showproblem.php?pid=6119
【思路】
- 首先通过处理交叉的可以处理成不交叉的
- 然后二分查找答案
- 如何判断一个长度是否可行?
- 双指针O(n)扫一次就可以,要处理区间和问题,所以先求前缀和
- 时间复杂度O(nlogn)
【AC】
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath> using namespace std;
typedef long long ll;
const int maxn=1e5+;
int n,m;
int cnt1,cnt2;
struct node
{
int l;
int r;
}a[maxn];
int b[maxn];
int c[maxn];
int pre1[maxn];
int pre2[maxn]; bool cmp(node x,node y)
{
if(x.l!=y.l) return x.l<y.l;
return x.r<y.r;
}
void Pre()
{
memset(pre1,,sizeof(pre1));
pre1[]=b[];
for(int i=;i<cnt1;i++)
{
pre1[i]=pre1[i-]+b[i];
}
memset(pre2,,sizeof(pre2));
pre2[]=c[];
for(int i=;i<cnt2;i++)
{
pre2[i]=pre2[i-]+c[i];
} }
bool check(int p,int q,int mid)
{
if(p==) return pre1[q]>=mid;
return pre1[q]-pre1[p-]>=mid;
}
bool judge(int mid)
{
int pos=upper_bound(pre2,pre2+cnt2,m)-pre2-;
int totm=pre2[pos];
int p=,q=pos+;
while(p<=q&&q<cnt1)
{
if(check(p,q,mid))
{
return true;
}
else
{
totm-=c[p];
p++;
while(pos+<cnt2&&totm+c[pos+]<=m)
{
totm+=c[pos+];
pos++;
}
q=pos+;
}
}
return false;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=;i<n;i++)
{
scanf("%d%d",&a[i].l,&a[i].r);
}
sort(a,a+n,cmp);
cnt1=;
cnt2=;
int p=a[].l,q=a[].r;
int low=,high=;
for(int i=;i<n;i++)
{
if(a[i].l<=q)
{
q=max(q,a[i].r);
}
else
{
b[cnt1++]=q-p+;
high+=q-p+;
c[cnt2++]=a[i].l-q-;
p=a[i].l;
q=a[i].r;
}
}
b[cnt1++]=q-p+;
high+=q-p+;
Pre();
while(low<=high)
{
int mid=(low+high)>>;
if(judge(mid))
{
low=mid+;
}
else
{
high=mid-;
}
}
cout<<low+m-<<endl;
}
return ;
}
【二分+尺取】HDU 6119 小小粉丝度度熊的更多相关文章
- hdu 6119 小小粉丝度度熊(尺取)
小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU 6119 小小粉丝度度熊 【预处理+尺取法】(2017"百度之星"程序设计大赛 - 初赛(B))
小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- hdu 6119 小小粉丝度度熊
小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU 6119 小小粉丝度度熊 (区间去重)【尺取】
<题目链接> 度度熊决定每天都在星星小姐的贴吧里面签到. 但是度度熊是一个非常健忘的孩子,总有那么几天,度度熊忘记签到,于是就断掉了他的连续签到. 不过度度熊并不是非常悲伤,因为他有m张补 ...
- HDU 6119 小小粉丝度度熊 双指针
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6119 题意:中文题面. 解法:先处理可能交叉的区间,然后容易发现满足双指针的特性. //HDU 611 ...
- HDU 6119 小小粉丝度度熊(Two pointers)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6119 [题目大意] 给出一些签到区间和一些补签卡,问可以创造的最长连续签到区间 [题解] 如果我们 ...
- HDU 6119 2017百度之星初赛B 小小粉丝度度熊 (二分)
小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- 2017"百度之星"程序设计大赛 - 初赛(B)小小粉丝度度熊
Problem Description 度度熊喜欢着喵哈哈村的大明星——星星小姐. 为什么度度熊会喜欢星星小姐呢? 首先星星小姐笑起来非常动人,其次星星小姐唱歌也非常好听. 但这都不是最重要的,最重要 ...
- Hdu-6119 小小粉丝度度熊 尺取
题面 题意:在一大段时间里,告诉你,你签到了哪些区间,现在再给你m张补签卡,问你最多能实现连续签到多少天 题解:那些时间区间是有重叠的,所以我们先排序离散,并得到哪些区间是可以补签的,这样问题就变成, ...
随机推荐
- 设计 REST API 的13个最佳实践
写在前面 之所以翻译这篇文章,是因为自从成为一名前端码农之后,调接口这件事情就成为了家常便饭,并且,还伴随着无数的争论与无奈.编写友好的 restful api 不论对于你的同事,还是将来作为第三方服 ...
- 在colab上运行style-transfer
1, 打开chrome浏览器,输入以下网址,打开风格转换主文件 https://colab.research.google.com/github/Hvass-Labs/TensorFlow-Tuto ...
- Java编译时根据调用该方法的类或对象所属的类决定
class Base{ int x = 1; static int y = 2; } class Subclass extends Base{ int x = 4; i ...
- 使用原生JavaScript模拟getElementByClassName .
最近在工作中,由于有一个插件必须使用jquery-pack.js,而这个包又是非常古老的jquery,所以又的函数是无法使用的,例如$()选择器以及parent()都取不到标签的内容. 所以没办法,只 ...
- JS正则表达式匹配<div><style>标签
测试字符串: <style>v\:* { BEHAVIOR: url(#default#VML) } o\:* { BEHA ...
- 原创 :单刷深渊 在Linux中系统安装mysql实战直播
[root@web108 tools]# ###开始装mysql 1添加用户 [root@web108 tools]# useradd -s /sbin/nologin -M mysql 2解压 [r ...
- 恩智浦iMX6Q核心板/飞思卡尔Cortex-A9高稳定性低功耗开发板
iMX6Q核心板-商业级 iMX6Q-Plus核心板 iMX6DL核心板-商业级 iMX6Q核心板-工业级 iMX6核心板区别: 名称 主频 内存 存储 SATA接口 运行温度 引角扩展 iMX6Q核 ...
- swift Equatable 函数签名的测试
struct Degoo:Equatable { var lex:String var pex:String static func == (left:Degoo, right:Degoo) -> ...
- js运行机制(线程)
浏览器线程 js运作在浏览器中,是单线程的,即js代码始终在一个线程上执行,这个线程称为js引擎线程. 浏览器是多线程的,除了js引擎线程,它还有: UI渲染线程 浏览器事件触发线程 http请求线 ...
- hql语法002
1. package cn.jbit.hibernatedemo.test; import java.util.Iterator; import java.util.List; import org. ...