大佬帮帮萌新吧
查看原帖
大佬帮帮萌新吧
721058
mtj295152楼主2023/7/18 14:32

为什么我的代码只能过72分啊,我想不出来问题在哪儿啊,帮帮孩子吧

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;

const int N = 5 * 1e4 + 10;
int a[N], f[N], g[N];

int main()
{
    int n = 0;
    while(cin >> a[n]) n ++;
    
    int len = 0;
    f[0] = a[0];
    for(int i = 1; i < n; i ++){
        int l = 0, r = len, mid;
        if(a[i] <= f[len]){
            f[++ len] = a[i];
        }
        else{
            while(l < r){
                mid = (l + r) / 2;
                //然后我们需要寻找序列中的第一个小于自己的位置
                if (f[mid] > a[i]) l = mid + 1;
                else r = mid;
            }
            f[l] = max(f[l], a[i]);
        }
    }

    cout << len + 1 << endl;

    int cnt = 0;
    for(int i = 0; i < n; i ++){
        int k = 0;
        while(k < cnt && a[i] > g[k]) k ++;
        g[k] = a[i];
        if(k >= cnt) cnt ++;
    }

    cout << cnt << endl;

}
2023/7/18 14:32
加载中...