【Codeforces249D】Donkey and Stars

来源:互联网 发布:cs1.6中文版for mac 编辑:程序博客网 时间:2024/06/10 13:05

转换以后就是一个lis。
(程序非常简单易懂)

#include <bits/stdc++.h>#define gc getchar()#define ll long long#define mid (l+r>>1)#define N 100009using namespace std;int n,a,b,c,d,m,sta[N],top;struct point{    ll x,y;    bool operator <(const point &rhs) const    {        return (x<rhs.x)||(x==rhs.x)&&(y>rhs.y);    }}p[N];int read(){    int x=1;    char ch;    while (ch=gc,ch<'0'||ch>'9') if (ch=='-') x=-1;    int s=ch-'0';    while (ch=gc,ch>='0'&&ch<='9') s=s*10+ch-'0';    return s*x;}int main(){    n=read();    a=read(),b=read(),c=read(),d=read();    for (int i=1;i<=n;i++)    {        int x=read(),y=read();        m++;        p[m].x=(ll)y*b-(ll)x*a;        p[m].y=(ll)x*c-(ll)y*d;        if (p[m].x<=0||p[m].y<=0) m--;    }    sort(p+1,p+m+1);    for (int i=1;i<=m;i++)    {        if (!top||p[i].y>p[sta[top]].y) sta[++top]=i;        else        {            int l=1,r=top,ret=0;            while (l<=r)            {                if (p[i].y<=p[sta[mid]].y) ret=mid,r=mid-1;                else l=mid+1;            }            if (p[i].y<p[sta[ret]].y) sta[ret]=i;        }    }    printf("%d\n",top);    return 0;}
原创粉丝点击