求助QWQ
查看原帖
求助QWQ
358068
comly楼主2021/11/29 16:42
#include<bits/stdc++.h>
using namespace std;
int dp[100001],a[100001];
int main()
{
    int n=1,j=0;
    while(cin>>a[n])
    {
        n++;
        //if(n==9)
        //break;
    }
    n--;
    //cout<<n<<endl;
    for(int i=1;i<=n;i++)
    {
        if(i==1)
        {
            j++;
            dp[1]=a[1];
        }
        else
        if(dp[j]>=a[i])
        {
            dp[j+1]=a[i];
            j++;
        }
        else
        {
            //cout<<i<<endl;
            int first=1,last=j;
            while(first<=last)
            {
                int mid=(first+last)/2;
                if(dp[mid]>=a[i])  first=mid+1;
                else  last=mid-1;
            }
            dp[first]=a[i];
            //for(int jj=1;jj<=j;jj++)
            //{
            //  cout<<dp[jj]<<" ";
            //}
            //cout<<endl<<endl;
        }
    }
    memset(dp,0,sizeof(dp));
    int jj=0;
    for(int i=1;i<=n;i++)
    {
        if(i==1)
        {
            jj++;
            dp[1]=a[1];
        }
        else
        if(dp[jj]<=a[i])
        {
            dp[jj+1]=a[i];
            jj++;
        }
        else
        {
            int first=1,last=jj;
            while(first<=last)
            {
                int mid=(first+last+1)>>2;
                if(dp[mid]<=a[i])  first=mid+1;
                else last=mid-1;
            }
            dp[first]=a[i];
        }
    }
    cout<<j<<endl;
    cout<<jj<<endl;
    return 0;
}

2021/11/29 16:42
加载中...