HDU 1257 ( 最少拦截系统 ) 最长单调子序列 二分+dp

来源:互联网 发布:淘宝卖东西抽成多少钱 编辑:程序博客网 时间:2024/06/03 08:22

1257 ( 最少拦截系统 )

#include<stdio.h>
int n,a,s[30001],l,m,num,r;
intmain()
{

(scanf("%d",&m)!=EOF)
       {

         num=0;
         while(
m--)
         {

                 scanf("%d",&a);
                 if(
num==0)
                 {

                    s[1] = a; num++;
                 }
   //开一个系统,初始化 
                 else
                 {
                         if(
a>s[num]) {
                                num++;s[num] = a;
                         }
   //重开一个系统 
                             else
                         {

                                l=1,r= num;
                                while(
l<=r)  //二分搜索a在b[i]中的位置 
                                {
                                        int
 m= (l+r)/2;
                                        if(
s[m]==a)break;
                                        if(
s[m]<a) l= m+1;
                                        if(
s[m]>a) r= m-1;
                                }
                                if(
l>r)
                                s[l] = a;
                         }
                 }
         }

         printf("%d\n",num);
       }
       return
0;      
}

 
0 0
原创粉丝点击