150求助
查看原帖
150求助
729338
xihegudiiakioi楼主2024/2/28 17:04
#include<bits/stdc++.h>
using namespace std;
int n = 0,x,dp[50005],a[50005],ma = 0;
int f[50005];
vector<int> d; 
int main(){
	while(cin >> x){
		n++;
		a[n] = x;
	}
	dp[++ma] = a[1];
	for(int i = 2;i <= n;i++){
		if(a[i] <= dp[ma]){
			dp[++ma] = a[i];
		}else{
			int l = 1,r = ma + 1,mid;
			while(l < r){
	    		mid = l + (r - l) / 2;
				if(dp[mid] >= a[i]){
					l = mid + 1;
				}else{
					r = mid;
		    	}
		    }
		    dp[l] = a[i];
		}
	}
	cout << ma << endl;
	
	
	ma = 0;
    f[0] = 0;
    for (int i = 1; i <= n; i++) {
        if (a[i] > f[ma]){
        	f[++ma] = a[i];
		}else{
            int l = 1, r = ma;
            while (l < r){
                int mid = l + r >> 1;
                if(f[mid] >= a[i]){
                	r = mid;
				}else{
					l = mid + 1;
				} 
            }
            f[l] = a[i];
        }
    }
    cout << ma;
	return 0;
} 
```cpp
貌似是第一问错了
2024/2/28 17:04
加载中...