Submission #1194424

#TimeUsernameProblemLanguageResultExecution timeMemory
1194424lopkusFinancial Report (JOI21_financial)C++20
48 / 100
4096 ms9904 KiB
#include <bits/stdc++.h>

#define int int64_t

void solve() {
  int n, d;
  std::cin >> n >> d;
  std::vector<int> a(n + 1);
  for(int i = 1; i <= n; i++) {
    std::cin >> a[i];
  }
  std::vector<int> compres;
  for(int i = 1; i <= n; i++) {
    compres.push_back(a[i]);
  }
  std::sort(compres.begin(), compres.end());
  for(int i = 1; i <= n; i++) {
    a[i] = lower_bound(compres.begin(), compres.end(), a[i]) - compres.begin() + 1;
  }
  std::vector<int> dp(n + 1, 1);
  std::vector<int> c(n + 1, 0);
  for(int i = 1; i <= n; i++) {
    int prv = i;
    for(int j = i - 1; j >= 1; j--) {
      if(prv - j > d) {
        c[i] = j;
        break;
      }
      if(a[j] <= a[i]) {
        prv = j;
      }
    }
    c[i] += 1;
  }
  for(int i = 1; i <= n; i++) {
    for(int j = i + 1; j <= n; j++) {
      if(c[j] <= i && a[j] > a[i]) {
        dp[j] = std::max(dp[j], dp[i] + 1);
      }
    }
  }
  std::cout << *max_element(dp.begin() + 1, dp.end());
}

signed main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);

  int t = 1;
  //std::cin >> t;
  while (t--) {
      solve();
  }

  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...