#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef tree <int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
const int INF = 1e9 + 1000;
const int mxn = 1e6 + 100;
int dp[mxn], a[mxn], n, x;
int main() {
cin >> n >> x;
for(int i = 1; i <= n; i++)
cin >> a[i];
int ans = 0;
ordered_set suf;
for(int i = n; i >= 1; i--) {
dp[i] = suf.order_of_key(-a[i]) + 1;
auto it = suf.lower_bound(-a[i]);
if(it != suf.end()) suf.erase(it);
suf.insert(-a[i]);
}
ordered_set pre;
for(int i = 1; i <= n; i++) {
int x = pre.order_of_key(a[i]) + dp[i];
ans = max(ans, x);
pre.insert(a[i] - x);
}
cout << ans << endl;
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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |