Submission #805183

#TimeUsernameProblemLanguageResultExecution timeMemory
805183myst6Financial Report (JOI21_financial)C++14
48 / 100
4074 ms4332 KiB
#include <bits/stdc++.h>

using namespace std;

int main() {
    cin.tie(0)->sync_with_stdio(0);
    int n, d;
    cin >> n >> d;
    vector<int> A(n);
    for (int i=0; i<n; i++) cin >> A[i];
    vector<int> dp(n,1);
    int ans = 0;
    for (int i=0; i<n; i++) {
        vector<int> minpath(n);
        multiset<int> path;
        for (int j=max(0,i-d); j<i; j++) {
            if (A[j] < A[i]) dp[i] = max(dp[i], dp[j]+1);
            if (A[j] == A[i]) dp[i] = max(dp[i], dp[j]);
            minpath[j] = A[j];
            path.insert(A[j]);
        }
        for (int j=i-d-1; j>=0; j--) {
            minpath[j] = max(*path.begin(), A[j]);
            if (A[j] >= minpath[j]) {
                if (A[j] < A[i]) dp[i] = max(dp[i], dp[j]+1);
                if (A[j] == A[i]) dp[i] = max(dp[i], dp[j]);
            }
            path.erase(path.find(minpath[j+d]));
            path.insert(minpath[j]);
        }
        ans = max(ans, dp[i]);
    }
    cout << ans << "\n";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...