【求助】为啥前17可以过,最后3个wa了?
查看原帖
【求助】为啥前17可以过,最后3个wa了?
753839
sygzyjq楼主2022/8/3 10:15
#include <bits/stdc++.h>
#define MAXN 50005
using namespace std;
int n;
int height[MAXN];
int ans_arr[MAXN];
int ans_arr2[MAXN];
int main(){
    //输入数据
    int n = 1;
	while((cin.peek()!=EOF)&&(cin.peek()!='\n')){
		cin>>height[n];
		n++;
	}
    n--;//这样输入n会大1 所以-1
    //先写的第二个
    int len1 = 0;//求最大上升子序列
    ans_arr[++len1] = height[1];
    for(int i = 2;i <= n;i ++){
        if(height[i] > ans_arr[len1]){
            ans_arr[len1+1] = height[i];
            len1 ++;
        }
        else{
            int temp = lower_bound(ans_arr+1,ans_arr+1+len1,height[i]) - ans_arr;
            ans_arr[temp] = height[i];
        }
    }
    
    //倒序
    for (int i = 1; i < n/2+1; i++) swap(height[i],height[n+1-i]);

    //求最大不上升子序列
    ans_arr2[1]=height[1]; 
    int len2=1;
    for (int i=2;i<=n;i++)
    {
        if (height[i]>=ans_arr2[len2]) ans_arr2[++len2]=height[i];
        else{
            int j=upper_bound(ans_arr2+1,ans_arr2+len2+1,height[i])-ans_arr2;
            ans_arr2[j]=height[i]; 
        }
    }
    
    cout<<len2<<endl;
    cout <<len1<<endl;
    return 0;
}
2022/8/3 10:15
加载中...