首页 > 其他 > 详细

wooden sticks

时间:2017-04-10 23:07:54      阅读:242      评论:0      收藏:0      [点我收藏+]
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct Node{
    int a,b;
};
Node w[5005];

int n,len;
int ldown[5005];
bool cmp(const Node &x,const Node &y){
    return x.a<y.a;
}
int binary(int i){
    int left,right,mid;
    left=0;right=len;
    while(left<right){
        mid=left+(right-left)/2;
        if(ldown[mid]<=w[i].b) right=mid;
        else left=mid+1;
    }
    return left;
} 


int main(){
    int t,i,j;
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        for(i=1;i<=n;i++){scanf("%d",&w[i].a);scanf("%d",&w[i].b);
        }
        sort(w+1,w+n+1,cmp);
    //    for(i=1;i<=n;i++){printf("%d ",w[i].a);printf("%d \n",w[i].b);}
        //求l的最长下降序列,等于最少个上升子序列之和
         ldown[1]=w[1].b;
         len=1;
         for(i=2;i<=n;i++){
             if(ldown[len]>=w[i].b) ldown[++len]=w[i].b;
             else{
                 int pos;
                 pos=binary(i);
                 ldown[pos]=w[i].b; } 
         }
        printf("%d\n",len);
    }
    
}

 

wooden sticks

原文:http://www.cnblogs.com/jiang2017/p/6691412.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!