Submission #1304795

#TimeUsernameProblemLanguageResultExecution timeMemory
1304795BilAktauAlmansurFinancial Report (JOI21_financial)C++20
48 / 100
4090 ms7596 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
const int N = 3e5 + 7, M = 5e6 + 7, mod = 1e9 + 7;

int n, d, a[N], dp[N], last[N];
vector<int> g[N];
void solve() {
    cin>>n>>d;
    for(int i = 1; i <= n; i++) {
        cin>>a[i];
    }
    // if(d == 1) {
    //     int mx = 0;
    //     stack<int> st;
    //     for(int i = n; i >= 1; i--) {
    //         while(st.size() && a[st.top()] <= a[i])st.pop();
    //         if(!st.size())dp[i] = 1;
    //         else dp[i] = dp[st.top()] + 1;
    //         st.push(i);
    //         mx = max(mx, dp[i]);
    //     }
    //     cout << mx << '\n';
    //     return;
    // }
    vector<int> vec;
    for(int i = 1; i <= n; i++) {
        vec.push_back(a[i]);
    }
    sort(vec.begin(), vec.end());
    vec.erase(unique(vec.begin(), vec.end()), vec.end());
    map<int, int> mp;
    int cur = 0;
    for(auto i : vec)mp[i] = ++cur;
    for(int i = 1; i <= n; i++)a[i] = mp[a[i]];
    for(int i = 1; i <= n; i++) {
        int cnt = 1;
        for(int j = 1; j <= n; j++) {
            if(a[i] > j) {
                if(i - last[j] <= d)cnt = max(cnt, dp[j] + 1);
            }else {
                if(i - last[j] <= d)last[j] = i;
            }
        }
        if(dp[a[i]] <= cnt) {
            dp[a[i]] = cnt;
            last[a[i]] = i;
        }
    }
    int mx = 0;
    for(int i = 1; i <= n; i++)mx = max(mx, dp[i]);
    cout << mx << '\n';
}
signed main() {
    ios_base::sync_with_stdio(NULL);
    cin.tie(NULL);
    int T = 1;
    // cin>>T;
    while(T --)solve();
}
#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...