旅游网站建设服务,网站地图的使用,常用的seo工具,涉县移动网站建设报价正题
题目链接:https://jzoj.net/senior/#contest/show/2930/3 题目大意
一个平面直角坐标系上有nnn个点#xff0c;如果两个点之间斜率在−1∼1-1\sim 1−1∼1之间那么就可以连接#xff0c;求最少多少条折线可以连接这些点。 解题思路
我们将整个坐标系逆时针选择45∘(4…正题
题目链接:https://jzoj.net/senior/#contest/show/2930/3 题目大意
一个平面直角坐标系上有nnn个点如果两个点之间斜率在−1∼1-1\sim 1−1∼1之间那么就可以连接求最少多少条折线可以连接这些点。 解题思路
我们将整个坐标系逆时针选择45∘(45^{\circ}(45∘(变为(xy,y−x)(xy,y-x)(xy,y−x))))然后每个点可以连接的位置就变成了右上方的矩形。
我们将点按照横坐标排序问题就变为了一个序列至少可以拆成多少个多少个不降序列。就是导弹拦截的第二问答案就是最长上升子序列的长度。 codecodecode
#includecstdio
#includecstring
#includealgorithm
using namespace std;
const int N31000;
struct node{int num,w;
}a[N];
int n,q[N],tail;
bool cmp(node x,node y)
{return (x.numy.num)?x.wy.w:x.numy.num;}
int main()
{freopen(lam.in,r,stdin);freopen(lam.out,w,stdout);scanf(%d,n);for(int i1;in;i){int x,y; scanf(%d%d,x,y);a[i](node){xy,y-x};}sort(a1,a1n,cmp);q[tail]a[1].w;for(int i2;in;i){if(a[i].wq[tail]) q[tail]a[i].w;else{int zlower_bound(q1,q1tail,a[i].w)-q;q[z]a[i].w;}}printf(%d,tail);
}