(话说最近写的这类题不少啊。。。)

化简:给定数轴上一系列点,向正方向移动,点不能撞在一起,如果碰到一起就需要放到另外一行,求要多少行才能满足所有点不相撞的条件。

(被标签误解,老是想到二分答案。。。)

这题其实不难。首先,答案一定是最大相撞的那个点。(开的道可以共用)

然后,这题就比较明朗了。要找的就是一个点,它后面的点在t时刻堆在它头上最多。

也就是到终点的距离超过了它。

这个关系有点眼熟.....有点像逆序对啊。。。或者说,对一个点求逆序对...亦或者...最长不(上升下降不管了)子序列(对结束点求)?

那....有请我们的lower_bound上场。(每个点*-1,才能求小于等于它的最大值)

但是,发现不对....wa了不少点。

回头想想,大思路应该没有问题,一定是哪个细节的问题。

翻了翻边界,发现是最长不上升子序列,所以lower_bound的一个等号是罪魁祸首...

于是改成upper_bound就行了啊。。。

于是不断(贪心地)更新,就能找到答案了。

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e6+;
struct node
{
ll x,v,st,ed;
}a[maxn]; ll q[maxn];
ll n,t;
ll tot;
int main()
{
scanf("%lld%lld",&n,&t);
for(int i=;i<=n;i++)
{
ll x,y;
scanf("%lld%lld",&x,&y);
a[i].st=x;
a[i].ed=x+y*t;
}
q[++tot]=-a[].ed;
for(int i=;i<=n;i++)
{
ll x=-a[i].ed;
if(x>=q[tot])
{
q[++tot]=x;
}
else
{
int k=upper_bound(q+,q+tot+,x)-q;
q[k]=x;
}
}
printf("%lld",tot);
return ;
}

(完)

最新文章

  1. 「坐上时光机,查找编译压缩后的文件最初的样子」gulp-sourcemaps 使用说明
  2. C语言回顾-二维数组
  3. sessionStorage 、localStorage 与cookie 的异同点
  4. Windows Server 2012 克隆修改SID
  5. DedeCMS让{dede:list}标签支持weight权重排序
  6. Android ImageButton android:scaleType
  7. mysql 5.7占用400M内存优化方案
  8. C#未将对象引用设置到对象的实例
  9. 洛谷P5245 【模板】多项式快速幂(多项式ln 多项式exp)
  10. 多个css样式合并到一个“目录”css文件中
  11. ERP项目实施记录06
  12. Mysql中使用Group_Concat将列组合进来。
  13. drupal 精彩文章
  14. SDRAM相位角计算
  15. 【CronExpression表达式详解和案例】(转载)
  16. http://s22.app1105796624.qqopenapp.com/
  17. Porting of cURL to Android OS using NDK (from The Software Rogue)
  18. django URL的补充 默认值 传多个参数
  19. POJ2912 Rochambeau [扩展域并查集]
  20. Pentaho Work with Big Data(五)—— 格式化原始web日志

热门文章

  1. 线程、进程概念与Android系统组件的关系
  2. Apache Kylin 概述
  3. 纯CSS焦点轮播效果-功能可扩展
  4. springboot配置ehcache2.X缓存(@Cacheable等注解和手动操作缓存的工具类 支持element粒度的时间设置)
  5. Xadmin查询
  6. Git学习记录-基本命令篇
  7. 简单cookie入侵
  8. python编程基础之二
  9. 【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(1)
  10. 配置code::blocks的glut环境