我不会二分
  • 板块P3902 递增
  • 楼主mot1ve
  • 当前回复8
  • 已保存回复8
  • 发布时间2020/4/28 16:01
  • 上次更新2023/11/7 03:46:28
查看原帖
我不会二分
250699
mot1ve楼主2020/4/28 16:01

为什么这道题第一种全WA但第二种可以过啊,这两种分别在什么时候用?懂行的说一下,谢谢!!

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int ans,n;
int a[100010],f[100010];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=1;i<=n;i++)
    {
        if(a[i]>f[ans])
        {
            ans++;
            f[ans]=a[i];
        }
        else
        {
            int l=1,r=ans,mid;
            while(l<r)
            {
                mid=(l+r+1)>>1;
                if(f[mid]<=a[i])
                {
                    l=mid;
                }
                else
                {
                    r=mid-1;
                }
            }
            f[l]=a[i];
        }
    }
    printf("%d",n-ans);
    return 0;
}

------------
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int ans,n;
int a[100010],f[100010];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=1;i<=n;i++)
    {
        if(a[i]>f[ans])
        {
            ans++;
            f[ans]=a[i];
        }
        else
        {
            int l=1,r=ans,mid;
            while(l<r)
            {
                mid=(l+r)>>1;
                if(a[i]<=f[mid])
                {
                    r=mid;
                }
                else
                {
                    l=mid+1;
                }
            }
            f[l]=a[i];
        }
    }
    printf("%d",n-ans);
    return 0;
}
2020/4/28 16:01
加载中...