Submission #563653

#TimeUsernameProblemLanguageResultExecution timeMemory
563653OttoTheDinoFinancial Report (JOI21_financial)C++17
0 / 100
53 ms3816 KiB
#include <bits/stdc++.h>
using namespace std;

#define rep(i,s,e)                  for (int i = s; i <= e; ++i)
#define rrep(i,s,e)                 for (int i = s; i >= e; --i)
#define pb                          push_back
#define pf                          push_front
#define fi                          first
#define se                          second
#define all(a)                      a.begin(), a.end()
#define len(a)                      (int)a.size()
typedef long long ll;
typedef pair<int, int> ii;
typedef vector<ii> vii;
typedef vector<int> vi;
typedef vector<double> vd;
typedef vector<string> vs;
typedef vector<ll> vll;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n, d; cin >> n >> d;
    int a[n+1];
    rep (i,1,n) cin >> a[i];
    set<int> mi;
    rep (i,1,d) mi.insert(a[i]);
    set<ii> st;
    st.insert({0,0});
    ii erase[n+1];
    rep (i,1,n) {
 //       cout << i << ": \n";
 //       for (ii sth : st) {
 //           cout << sth.fi << " " << sth.se << "\n";
 //       }
      if (erase[i].fi) st.erase(erase[i]);
        mi.erase(a[i]);
        if (i+d<=n) mi.insert(a[i+d]);
        auto it = st.lower_bound({a[i],0});
        if (it==st.end()) {
            st.insert({a[i], (*--it).se+1});
            if (a[i] < *mi.begin() && i+d+1 <= n) erase[i+d+1] = {a[i], (*it).se+1};
        }
        else if (a[i]!=(*it).fi) {
            ii el = *it;
            st.insert({a[i],(*--it).se+1});
            if ((*it).se+1==el.se) st.erase(el);
            if (a[i] < *mi.begin() && i+d+1 <= n) erase[i+d+1] = {a[i], (*it).se+1};
        }
        else if (a[i] < *mi.begin() && i+d+1 <= n) erase[i+d+1] = {a[i], (*it).se};
    }
    cout << (*st.rbegin()).se << "\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...