首页 > 其他 > 详细

POJ 3671 (n log n,LIS)

时间:2014-08-15 17:59:59      阅读:353      评论:0      收藏:0      [点我收藏+]

POJ 3671

题意:要使序列形成非递减的序列,最少改变几个数;


思路:ans=n-lis();


#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<vector>
#include<cmath>
using namespace std;

int n;
int cow[30010];
vector<int> len;    //len[k]=t,表示k长度的序列的最小末尾值,此数组线性递增。

int binsearch(int val)
{
    int le=0,ri=len.size()-1;

    while(le<=ri)
    {
        int mid=(le+ri)>>1;
        if(len[mid]<=val) le=mid+1;    //注意是<=,因为要求序列非递减!
        else ri=mid-1;
    }
    return le;     //返回的第一个k,len[k-1]<=val
}



int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        int c,k;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&c);
            k=binsearch(c);
            if(len.size()<=k) len.push_back(c);
            else len[k]=c;
        }
        printf("%d\n",n-len.size());
    }
    return 0;
}


POJ 3671 (n log n,LIS),布布扣,bubuko.com

POJ 3671 (n log n,LIS)

原文:http://blog.csdn.net/code_or_code/article/details/38586865

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