poj1548

来源:互联网 发布:硕鼠mac 下载打不开 编辑:程序博客网 时间:2024/06/05 19:37

这题是和poj1065相同解法,上个题也可以抽象成坐标,往右下角移动

Source CodeProblem: 1548User: fistyMemory: 668KTime: 16MSLanguage: G++Result: Accepted    Source Code    #include <iostream>    #include <string.h>    #include <algorithm>    #include <stdio.h>    using namespace std;    const int N = 5005;    const int INF = ~0U>>1;    struct Node    {        int x,y;    };    Node a[N],t[N];    int d[N];    bool cmp(Node a,Node b)    {        return a.x < b.x || (a.x == b.x && a.y < b.y);    }    int Binary_Search(int l,int r,int x)    {        while(l < r)        {            int m = (l + r) >> 1;            if(x <= d[m]) r = m;            else l = m + 1;        }        return l;    }    int Work(Node a[],int n)    {        d[0] = -1;        int max = -1;        int len = 1;        for(int i=1;i<=n;i++)        {            d[len] = INF;            int j = Binary_Search(0,len,a[i].y);            if(j == len) len++;            d[j] = a[i].y;        }        return len - 1;    }    int main()    {        while(true)        {            int n = 0;            int x,y;            while(scanf("%d%d",&x,&y))            {                if(x == -1 && y == -1) return 0;                if(x == 0  && y == 0)  break;                n++;                a[n].x = x;                a[n].y = y;            }            sort(a+1,a+n+1,cmp);            for(int i=1;i<=n;i++)               t[n-i+1] = a[i];            printf("%d\n",Work(t,n));        }        return 0;    }


0 0