zoukankan      html  css  js  c++  java
  • 洛谷P3902: 递增(最长上升子序列+二分优化)

    https://www.luogu.org/problemnew/show/P1439

    题目描述

    现有数列A1​,A2​,⋯,AN​,修改最少的数字,使得数列严格单调递增。

    输入输出格式

    输入格式:

    第1 行,1 个整数N

    第2 行,N 个整数A1​,A2​,⋯,AN​

    输出格式:

    1 个整数,表示最少修改的数字

    输入输出样例

    输入样例#1: 复制

    3
    1 3 2

    输出样例#1: 复制

    1

    说明

    • 对于50% 的数据,N≤103

    • 对于100% 的数据,1≤N≤105,1≤Ai​≤109

    解题思路:

    把序列变成递增的,可以先求出最长上升子序列,然后改变那些除了最长上升子序列的数,所以答案就是

    总数-最长上升子序列数。

    #include <stdio.h>
    #include <algorithm>
    using namespace std;
    #define N 100020
    int a[N], f[N];
    int main()
    {
        int n, i, len, l, r, mid, inf=199999999;
        while(scanf("%d", &n)!=EOF)
        {
            for(i=1; i<=n; i++)
                scanf("%d", &a[i]);
            f[1]=a[1];
            len=1;
            for(i=2; i<=n; i++)
            {
                l=1;r=len;
                while(l<=r)
                {
                    mid=(l+r)/2;
                    if(f[mid]>=a[i])
                        r=mid-1;
                    else
                        l=mid+1;
                }
                f[l]=a[i];
                len=max(len, l);
            }
            printf("%d
    ", n-len);
        }
    
        return 0;
    }
  • 相关阅读:
    cve-2015-1635 poc
    Python实现ORM
    Android完全退出应用的方法
    Java反射理解
    Android动画
    Android进程间通信IPC
    Java的四种引用方式
    Android底部菜单的实现
    Android中AsyncTask使用
    Android自定义控件
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/11852613.html
Copyright © 2011-2022 走看看