170分,求调,回关
查看原帖
170分,求调,回关
679659
wzhmyt楼主2024/9/1 15:32
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int a[maxn], n, ans, d[maxn], f[maxn], cnt = 1, d2[maxn];
int main() {
    while (cin >> a[++n])
        d[n] = 5 * 1e4;
    n--;
    for (int i = n; i >= 1; i--) {
        int now = upper_bound(d + 1, d + n + 1, a[i]) - d;
        f[i] = now;
        d[now] = a[i];
        ans = max(ans, f[i]);
    }
    cout << ans << '\n';
    cnt = 1, d2[1] = a[1];
    for (int i = 2; i <= n; i++) {
        int minn = INT_MAX, id;
        for (int j = 1; j <= cnt; j++) {
            if (a[i] <= d2[j] && minn > d2[j]) {
                minn = d2[j];
                id = j;
            }
        }
        if (minn == INT_MAX) {
            cnt++;
            d2[cnt] = a[i];
        }
        else
            d2[id] = a[i];
    }
    cout << cnt;
    return 0;
}
2024/9/1 15:32
加载中...