hdu6119 尺取 双指针
来源:互联网 发布:2017广电总局 网络盒子 编辑:程序博客网 时间:2024/04/30 01:34
中文题就不说题意了。
题解
题目已经说了区间会存在交叉,所以我们先把区间排序后把交叉的区间合并起来。然后用一个数组存放相邻两个区间的差距,之后双指针尺取即可。最后算一下如果只有一个区间时的天数。
代码还是很好懂的
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;const int maxn = 1e5+5;ll n,m;ll dis[maxn];struct Node{ ll l,r;}tmp[maxn],node[maxn];bool cmp(Node a,Node b){ if(a.l==b.l) return a.r<b.r; else return a.l<b.l;}int main(){ while(~scanf("%lld%lld",&n,&m)) { for(int i=0;i<n;i++) scanf("%lld%lld",&tmp[i].l,&tmp[i].r); sort(tmp,tmp+n,cmp); int num=1; node[num] = tmp[0]; for(int i=1;i<n;i++) { if(tmp[i].l<=node[num].r+1) node[num].r = max(node[num].r,tmp[i].r); else node[++num] = tmp[i]; } for(int i=1;i<num;i++) dis[i] = node[i+1].l-node[i].r-1; ll res=0,ans=-1; int cnt=1; for(int i=1;i<num;i++) { res += dis[i]; while(res>m) res -= dis[cnt++]; ans = max(ans,node[i+1].r-node[cnt].l+1+m-res); } ans = max(ans,node[1].r-node[1].l+1+m); printf("%lld\n",ans); } return 0;}
阅读全文
1 0
- hdu6119 尺取 双指针
- hdu6119 小小粉丝度度熊【尺取】
- HDU6119尺取法
- hdu6119小小粉丝度度熊(尺取法)
- (双指针尺取) CodeForces
- hdu6119 小小粉丝度度熊【尺取法(滑动窗口)】
- C++ 引用 解引用 取地址 指针 双指针 指针的引用 二级指针
- HDU6119 小小粉丝度度熊
- hdu6119 小小粉丝度度熊
- HDU6119-小小粉丝度度熊
- Codeforces 701C They Are Everywhere(尺取/双指针)
- hdu6103 尺取 双指针 2017多校第六场1008
- c++ 指针取值
- 指针,引用,取值
- &(引用 取址)+指针
- 指针与取地址
- csu:1956: 数字和 (多指针尺取)
- 指针与取地址符&
- HTML标签大全
- ES6 扩展操作符的一个误区
- 继承.重写.重载
- JDBC之preparedStatement
- Error LNK2001 无法解析的外部符号 的几种情况及解决办法
- hdu6119 尺取 双指针
- PHP关于(类对象)回调方法的使用
- phpl判断mysq数据库中的某个数据表是否存在的方法总结
- 关于IDEA工具在springboot整合mybatis中出现的Invalid bound statement (not found)问题
- HDU1160DP最长上升子序列微整形
- 尔石山
- java-三角形矩形输入长宽求面积周长等
- 火狐浏览器导出EXCEL 表格,文件名乱码问题
- OJ.2456: 评委打分