zoukankan      html  css  js  c++  java
  • 汕头市队赛 SRM 07 A 你的麻将会排序吗

    A 你的麻将会排序吗 SRM 07

    曾经有过一些沉迷日麻的小孩纸,后来呀,他们都去寻找自己的世界了。

            kpm也是这样的小孩纸。他想有一只自动整理牌的机器。当麻将以给定的顺序进入机器时,通过机器的运转,使得麻将们出机器的顺序是递增的。所以kpm需要在机器中建立一些传送带 (假设这些传送带都是足够长,可以停放很多很多的麻将),问题是,现在kpm需要建立多少条传送带才能完成他的机器。

            kpm大概有10^5块麻将吧。

    输入格式

                   第一行是一个不大于10^5的数,表述麻将的总数。

                   第二行是麻将依次进入机器的编号,ai表示编号为ai的麻将在i时刻进入机器,保证是一个1-n的排列。

    输入格式

                   一个数字,表示这个机器最少需要建几条传送带。

    样例输入

    9
    8 4 2 5 3 9 1 6 7

    样例输出

    4


    这道题其实很容易看出来是求有多少个下降序列(不重复)
    就像很多人写过的导弹拦截一样 我们可以贪心
    每个数x我们都可以找已知的序列中每个序列最末也就是最小的数和x比较 比x大的都符合条件
    不过由贪心可得越接近x越好 所以我们的目标其实是找到比x大中最小的
    然后我们发现 我们维护的序列具有单调性
    比如我们每次找到一个数 x
    若序列中没有符合的 那么我们会新开一个序列 而这个序列的末端就是x 一定比前面所有的序列末端都大
    若找到了j个符合的n-j——n,那么n-j就是我们要找的最优解 此时x比1-n-j的末端都大 比n-j——n的末端都小 此时用x替换n-j的末端
    容易证明序列仍然单调 那么我们就可以继续二分了
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #define LL long long
    using namespace std;
    const int M=1e5+7;
    int read(){
        int ans=0,f=1,c=getchar();
        while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();}
        return ans*f;
    }
    int n,w[M],cnt,k;
    int find(int k){
        int l=1,r=cnt;
        while(l<=r){
            int mid=(l+r)>>1;
            if(w[mid]<k) l=mid+1;
            else r=mid-1;    
        }
        return l;
    }
    int main()
    {
        n=read();
        w[++cnt]=read();
        for(int i=2;i<=n;i++){
            k=read();
            int s=find(k);
            if(s>cnt) w[++cnt]=k;
            else w[s]=k;
        }
        printf("%d
    ",cnt);
        return 0;
    }
    View Code
  • 相关阅读:
    depression...
    Childhood is certainly not the happiest time of your time
    我在上海的日子(前言)
    struts国际化的一点尝试
    脚本(js)控制页面输入
    db2和oracle的一些区别
    工作几年是个坎?
    来深圳这半个月
    10年编程无师自通
    初试java mail
  • 原文地址:https://www.cnblogs.com/lyzuikeai/p/7207768.html
Copyright © 2011-2022 走看看