5 条题解

  • 0
    @ 2021-10-24 11:40:55
    /**************
    Note:咸鱼不贤于
    **************/
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <cstdio>
    #include <iostream>
    #include <queue>
    #include <stack>
    #include <string>
    using namespace std;
    #define LL long long
    const int N = 1e6 + 10;
    const int INF = 0x3f3f3f3f;
    int a[N];
    int dp[N];
    int main()
    {
    	int n = 0 ; 
    	while(cin >> a[n])
    	{
    		n++;
    	}
    	int len = 1;
    	dp[0] = 0x3f3f3f3f;
    	for(int i = 0 ; i < n ; i++)
    	{
    		if(dp[len-1] >= a[i])
    			dp[len++] = a[i];
    		else 
    		{
    			int l = 0,r = len-1;  
    			while(l < r)
    			{
    				int mid = l + r  >> 1;
    				if(dp[mid] >= a[i])
    					l = mid + 1;
    				else 
    					r = mid;
    			}
    			dp[l] = a[i];
    		}
    	}
    	cout << len -1  << endl;
    	memset(dp,-1,sizeof(dp));
    	len = 1;
    	for(int i = 0 ; i < n ; i++)
    	{
    		if(dp[len-1] < a[i])
    			dp[len++] = a[i];
    		else 
    		{
    			int l = 0,r = len-1;
    			while(l < r)
    			{
    				int mid = l + r >> 1;
    				if(dp[mid] >= a[i])
    					r = mid;
    				else 
    					l = mid + 1;
    			}
    			if(l != 0)
    				dp[l] = a[i];
    		}
    	}
    	cout << len-1 << endl;
    	return 0;
    }
    

    信息

    ID
    641
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    292
    已通过
    65
    上传者