题意

平面上有\(n\)个点,如果两个点的线段与\(x\)轴的角在\([-45^{\circ}, 45^{\circ}]\),则两个点可以连线。求最少的折线(折线由线段首尾相连)使得覆盖所有点。

分析

bzoj的题面有坑,不是15而是45。

将点绕原点旋转\(-45^{\circ}\)后,能连线的话就是另一个点在左上角。那么问题就是求最少链个数。根据定理,最少链个数=最大反链长度。

题解

用bit求最大反链即可。

#include <bits/stdc++.h>
using namespace std;
inline int getint() {
int x=0, f=1, c=getchar();
for(; c<48||c>57; f=c=='-'?-1:f, c=getchar());
for(; c>47&&c<58; x=x*10+c-48, c=getchar());
return x*f;
}
const int N=30005;
struct ip {
int x, y;
void scan() {
int a=getint(), b=getint();
x=a-b, y=-(a+b);
}
}p[N];
inline bool cmpy(const ip &a, const ip &b) {
return a.y<b.y;
}
inline bool cmpx(const ip &a, const ip &b) {
return a.x==b.x?a.y>b.y:a.x<b.x;
}
int tot, n, s[N];
inline void upd(int x, int g) {
for(; x<=tot; x+=x&-x) {
s[x]=max(s[x], g);
}
}
inline int sum(int x) {
int y=0;
for(; x; x-=x&-x) {
y=max(y, s[x]);
}
return y;
}
int main() {
n=getint();
for(int i=1; i<=n; ++i) {
p[i].scan();
}
sort(p+1, p+1+n, cmpy);
for(int i=1, now=-100001; i<=n; ++i) {
p[i].y==now?(p[i].y=tot):(now=p[i].y, p[i].y=++tot);
}
sort(p+1, p+1+n, cmpx);
int ans=0;
for(int i=1; i<=n; ++i) {
int d=sum(p[i].y-1)+1;
upd(p[i].y, d);
ans=max(ans, d);
}
printf("%d\n", ans);
return 0;
}

最新文章

  1. Linux(十)___iptables防火墙
  2. Java 6 JVM参数选项大全(中文版)
  3. jsp Request获取url信息的各种方法比较
  4. 浅谈React受控与非受控组件
  5. WPF 组合快捷键
  6. Android 使用PullToRefresh实现下拉刷新和上拉加载(ExpandableListView)
  7. 2015 AlBaath Collegiate Programming Contest B
  8. kindeditor 操作时同步到textarea
  9. Fragment和Activity的区别
  10. sublime3可用key
  11. C# 正则表达式 匹配IP地址
  12. UVA11992 - Fast Matrix Operations(段树部分的变化)
  13. 不可不知的表达式树(1)Expression初探
  14. [java,2017-05-16] java中清空StringBuffer的方法以及耗费时间比较
  15. libuv示例代码
  16. 使用sysbench 进行msyql oltp压力测试
  17. 【HDU 5382】 GCD?LCM! (数论、积性函数)
  18. 【js+jquery】通用、简单的JS 提示框
  19. Dom最常用的API
  20. 一个远程启动windows c++程序引发的技术决策现象

热门文章

  1. Vs 控件错位 右侧资源管理器文件夹点击也不管用,显示异常
  2. 使用Autofac在ASP.NET Web API上实现依赖注入
  3. Android 中 Internal Storage 和 External Storage 的区别
  4. Linux Shell 高级编程技巧1----深入讨论(awk、&lt;&lt;)
  5. 垂直时间轴HTML
  6. linux环境下libevent的使用
  7. ASMCMD命令
  8. ASP.NET 5中的ASP.NET Bundles跑到哪里去了?
  9. url地址中 &quot;&amp;&quot; &quot;/&quot;等符号的转义处理(转)
  10. Linux---从start_kernel到init进程启动