小小粉丝度度熊 二分答案 + two pointer
http://acm.hdu.edu.cn/showproblem.php?pid=6119
发现自己的two pointer能力超弱。
这题是合并时间后,二分答案。
可以知道对于每个时间区间,合法的答案肯定是从其开始时间,向左扩展
或者从其结束时间,向右扩展。
复杂度O(2n log val)
细节有点恶心
#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;
const int maxn = + ;
struct Node {
int be, en;
bool operator < (const struct Node & rhs) const {
if (be != rhs.be) return be < rhs.be;
else return en < rhs.en;
}
}node[maxn];
int m, n;
LL sum[maxn];
bool check(LL val) {
int p1 = , p2 = ;
while (p1 <= n) {
while (p2 <= n && node[p2].en - node[p1].be + < val) {
p2++;
}
if (p2 == n + ) {
LL cut = sum[n] - sum[p1];
cut += node[p1].be + val - - node[n].en;
if (cut <= m) return true;
p1++;
continue;
}
// if (node[p2].en - node[p1].be + 1 < val) break;
if (node[p2].be - node[p1].be + > val) {
if (sum[p2 - ] - sum[p1] + node[p1].be + val - - node[p2 - ].en <= m) return true;
} else {
if (sum[p2] - sum[p1] <= m) return true;
}
p1++;
}
p1 = p2 = ;
while (p2 <= n && node[p2].en < val) p2++;
while (p2 <= n) {
while (p1 <= n && node[p2].en - node[p1].en + > val) {
p1++;
}
if (node[p2].en - node[p1].be + >= val) {
if (sum[p2] - sum[p1] <= m) return true;
} else {
LL cut = sum[p2] - sum[p1];
LL to = node[p2].en - val + ;
cut += node[p1].be - to;
if (cut <= m) return true;
}
p2++;
}
return false;
}
void work() {
for (int i = ; i <= n; ++i) {
scanf("%d%d", &node[i].be, &node[i].en);
}
sort(node + , node + + n);
int len = ;
for (int i = ; i <= n; ++i) {
if (node[len].en >= node[i].be) node[len].en = max(node[len].en, node[i].en);
else {
node[++len] = node[i];
}
}
n = len;
for (int i = ; i <= n; ++i) {
sum[i] = sum[i - ] + node[i].be - node[i - ].en - ;
}
LL be = , en = 1e15;
for (int i = ; i <= n; ++i) {
be = max(be, 1LL * node[i].en - node[i].be + );
}
while (be <= en) {
LL mid = (be + en) >> ;
if (check(mid)) be = mid + ;
else en = mid - ;
}
cout << en << endl;
} int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
while (scanf("%d%d", &n, &m) > ) work();
return ;
}
小小粉丝度度熊 二分答案 + two pointer的更多相关文章
- 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 小小粉丝度度熊 【预处理+尺取法】(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张补 ...
- 2017"百度之星"程序设计大赛 - 初赛(B)小小粉丝度度熊
Problem Description 度度熊喜欢着喵哈哈村的大明星——星星小姐. 为什么度度熊会喜欢星星小姐呢? 首先星星小姐笑起来非常动人,其次星星小姐唱歌也非常好听. 但这都不是最重要的,最重要 ...
- 【二分+尺取】HDU 6119 小小粉丝度度熊
http://acm.hdu.edu.cn/showproblem.php?pid=6119 [思路] 首先通过处理交叉的可以处理成不交叉的 然后二分查找答案 如何判断一个长度是否可行? 双指针O(n ...
- HDU 6119 小小粉丝度度熊(Two pointers)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6119 [题目大意] 给出一些签到区间和一些补签卡,问可以创造的最长连续签到区间 [题解] 如果我们 ...
- 百度之星2017初赛B1006 小小粉丝度度熊
思路: 考虑到补签卡一定是连续放置才更优,所以直接根据起始位置枚举.预先处理区间之间的gap的前缀和,在枚举过程中二分即可.复杂度O(nlog(n)). 实现: #include <iostre ...
随机推荐
- POJ2069:Super Star
我对模拟退火的理解:https://www.cnblogs.com/AKMer/p/9580982.html 我对爬山的理解:https://www.cnblogs.com/AKMer/p/95552 ...
- jexus入门
参考:https://www.linuxdot.net/bbsfile-3084 一.Jexus简介:Jexus web server for linux 是一款基于.NET兼容环境,运行于Linux ...
- binlog配置和使用
binlog启用和禁用在/etc/my.cnf文件中添加log-bin=mysql-bin来启用binlog,mysql-bin为日志文件名前缀.如果用户有super权限,可通过set sql_log ...
- CCS V5 使用教程二:创建工程和配置软件仿真
新建CCS项目 选择File/New/CCS Project: 新建项目对话框 1) Project name: 指项目名称,这里要注意的项目名称不区分大小写. 2) Ou ...
- DCloud-MUI:Hello MUI2
ylbtech-DCloud: 1. <head> <meta charset="utf-8"> <title>Hello MUI</ti ...
- jquery easyui 推荐博客 (MVC+EF+EasyUI+Bootstrap)
构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(52)-美化EasyUI皮肤和图标 系列目录 我很久以前就想更新系统的皮肤功能,Easyui 自 ...
- cdh ntpdate 问题
ntpdc -np 一个正常一个不正常
- web安全之同源策略
为什么使用同源策略?一个重要原因就是对cookie的保护,cookie 中存着sessionID .如果已经登录网站,同时又去了任意其他网站,该网站有恶意JS代码.如果没有同源策略,那么这个网站就能通 ...
- ASP.NET jquery 获取服务器控件ID
一般方法: jQuery("#txtUserName").val(); 如果页面加载了母版页或者自定义控件:该页面的ID有可能会被篡改(可能是因为避免控件ID冲突的机制),因此强烈 ...
- C++ List的用法(转载)
Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢. assign() 给list赋值 back() 返回最后一个元素 begin ...