#include <bits/stdc++.h>
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];
}
// a[i] <= n
std::vector<int> compres;
for(int i = 1; i <= n; i++) {
compres.push_back(a[i]);
}
sort(compres.begin(), compres.end());
compres.erase(unique(compres.begin(), compres.end()), compres.end());
for(int i = 1; i <= n; i++) {
a[i] = lower_bound(compres.begin(), compres.end(), a[i]) - compres.begin() + 1;
}
std::vector<std::vector<int>> dp(n + 1, std::vector<int>(n + 1));
for(int i = 1; i <= n; i++) {
for(int j = i - 1; j >= std::max(0, i - d); j--) {
for(int val = 0; val <= n; val++) {
if(a[i] > val) {
dp[i][a[i]] = std::max(dp[i][a[i]], dp[j][val] + 1);
}
else {
dp[i][val] = std::max(dp[i][val], dp[j][val]);
}
}
}
}
std::cout << *max_element(dp[n].begin(), dp[n].end());
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int t = 1;
//std::cin >> t;
while (t--) {
solve();
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |