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 小小粉丝度度熊的更多相关文章

  1. hdu 6119 小小粉丝度度熊(尺取)

    小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  2. HDU 6119 小小粉丝度度熊 【预处理+尺取法】(2017"百度之星"程序设计大赛 - 初赛(B))

    小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  3. hdu 6119 小小粉丝度度熊

    小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  4. HDU 6119 小小粉丝度度熊 (区间去重)【尺取】

    <题目链接> 度度熊决定每天都在星星小姐的贴吧里面签到. 但是度度熊是一个非常健忘的孩子,总有那么几天,度度熊忘记签到,于是就断掉了他的连续签到. 不过度度熊并不是非常悲伤,因为他有m张补 ...

  5. HDU 6119 小小粉丝度度熊 双指针

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6119 题意:中文题面. 解法:先处理可能交叉的区间,然后容易发现满足双指针的特性. //HDU 611 ...

  6. HDU 6119 小小粉丝度度熊(Two pointers)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6119 [题目大意] 给出一些签到区间和一些补签卡,问可以创造的最长连续签到区间 [题解] 如果我们 ...

  7. HDU 6119 2017百度之星初赛B 小小粉丝度度熊 (二分)

    小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  8. 2017"百度之星"程序设计大赛 - 初赛(B)小小粉丝度度熊

    Problem Description 度度熊喜欢着喵哈哈村的大明星——星星小姐. 为什么度度熊会喜欢星星小姐呢? 首先星星小姐笑起来非常动人,其次星星小姐唱歌也非常好听. 但这都不是最重要的,最重要 ...

  9. Hdu-6119 小小粉丝度度熊 尺取

    题面 题意:在一大段时间里,告诉你,你签到了哪些区间,现在再给你m张补签卡,问你最多能实现连续签到多少天 题解:那些时间区间是有重叠的,所以我们先排序离散,并得到哪些区间是可以补签的,这样问题就变成, ...

随机推荐

  1. 设计 REST API 的13个最佳实践

    写在前面 之所以翻译这篇文章,是因为自从成为一名前端码农之后,调接口这件事情就成为了家常便饭,并且,还伴随着无数的争论与无奈.编写友好的 restful api 不论对于你的同事,还是将来作为第三方服 ...

  2. 在colab上运行style-transfer

    1,  打开chrome浏览器,输入以下网址,打开风格转换主文件 https://colab.research.google.com/github/Hvass-Labs/TensorFlow-Tuto ...

  3. Java编译时根据调用该方法的类或对象所属的类决定

    class Base{     int x = 1;     static int y = 2; } class Subclass extends Base{     int x = 4;     i ...

  4. 使用原生JavaScript模拟getElementByClassName .

    最近在工作中,由于有一个插件必须使用jquery-pack.js,而这个包又是非常古老的jquery,所以又的函数是无法使用的,例如$()选择器以及parent()都取不到标签的内容. 所以没办法,只 ...

  5. JS正则表达式匹配<div><style>标签

    测试字符串: <style>v\:* {                 BEHAVIOR: url(#default#VML) } o\:* {                 BEHA ...

  6. 原创 :单刷深渊 在Linux中系统安装mysql实战直播

    [root@web108 tools]# ###开始装mysql 1添加用户 [root@web108 tools]# useradd -s /sbin/nologin -M mysql 2解压 [r ...

  7. 恩智浦iMX6Q核心板/飞思卡尔Cortex-A9高稳定性低功耗开发板

    iMX6Q核心板-商业级 iMX6Q-Plus核心板 iMX6DL核心板-商业级 iMX6Q核心板-工业级 iMX6核心板区别: 名称 主频 内存 存储 SATA接口 运行温度 引角扩展 iMX6Q核 ...

  8. swift Equatable 函数签名的测试

    struct Degoo:Equatable { var lex:String var pex:String static func == (left:Degoo, right:Degoo) -> ...

  9. js运行机制(线程)

    浏览器线程 js运作在浏览器中,是单线程的,即js代码始终在一个线程上执行,这个线程称为js引擎线程. 浏览器是多线程的,除了js引擎线程,它还有:  UI渲染线程 浏览器事件触发线程 http请求线 ...

  10. hql语法002

    1. package cn.jbit.hibernatedemo.test; import java.util.Iterator; import java.util.List; import org. ...