• 最长不下降子序列


    题目大意:
    输入两个数n和k代表数组元素个数和可以删掉元素的个数,让你删掉k个数,如果存在一种方式删掉数之后序列是不下降或者不上升的,则输出A is a magic array.否则输出A is not a magic array.
    基本思路:
    最长上升子序列(不下降而已,略有不同);
    反思与总结:
    哎,不扎实啊,太菜了,还是看板子,手写写不出,难受,既如此,便要用命来干了(此言不虚);
    代码如下:

    #include<cstdio>
    #include<algorithm>
    
    using namespace std;
    
    const int maxn = 100000+10;
    
    int ans[maxn];
    int rec[maxn];
    
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int n,k;
            scanf("%d%d",&n,&k);
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&ans[i]);
            }
            int len=1;
            rec[1]=ans[1];
            for(int i=2;i<=n;i++)
            {
                if(ans[i]>=rec[len]) rec[++len]=ans[i];
                else
                {
                    int tmp=upper_bound(rec+1,rec+len+1,ans[i])-rec;
                    rec[tmp]=ans[i];
                }
            }
            if(len+k>=n)
            {
                printf("A is a magic array.
    ");
            }
            else
            {
                len=1;
                rec[1]=ans[n];
                for(int i=n-1;i>=1;i--)
                {
                    if(ans[i]>=rec[i]) rec[++len]=ans[i];
                    else
                    {
                        int tmp=upper_bound(rec+1,rec+len+1,ans[i])-rec;
                        //左闭右开
                        rec[tmp]=ans[i];
                    }
                }
                if(len+k>=n) printf("A is a magic array.
    ");
                else printf("A is not a magic array.
    ");
            }
        }
        return 0;
    }
    
  • 相关阅读:
    每个人在公司都有自己的品牌--如何做一名优秀的管理者
    ios 逆向
    游戏整理
    Mac 开发装机必备
    php整理
    mongodb 学习
    python 学习
    pdf 下载整理
    C# 整理
    微服务学习
  • 原文地址:https://www.cnblogs.com/imzscilovecode/p/7502626.html
Copyright © 2020-2023  润新知