#include<bits/stdc++.h>
using namespace std;
#define int long long
#define nl '\n'
int lis(vector<int>& a){
int n = a.size();
vector<int> v;
for(int i=0; i<n; i++){
if(v.empty() or v.back() < a[i]){
v.push_back(a[i]);
continue;
}
*lower_bound(v.begin(), v.end(), a[i]) = a[i];
}
return v.size();
}
inline void solve(){
int n, x;
cin>>n>>x;
vector<int> a(n);
for(int i=0; i<n; i++) cin>>a[i];
int pre1[n], pre2[n];
vector<int> v;
for(int i=0; i<n; i++){
if(v.empty() or v.back() < a[i]){
v.push_back(a[i]);
pre1[i] = v.size();
continue;
}
*lower_bound(v.begin(), v.end(), a[i]) = a[i];
pre1[i] = v.size();
}
v.clear();
for(int i=n-1; i>=0; i--){
if(v.empty() or v.back() > a[i]){
v.push_back(a[i]);
pre2[i] = v.size();
continue;
}
*--upper_bound(v.rbegin(), v.rend(), a[i]) = a[i];
pre2[i] = v.size();
}
int ans = pre1[n-1];
for(int i=0; i<n-1; i++){
ans = max(ans, pre1[i] + pre2[i+1]);
}
cout<<ans;
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(NULL);cout.tie(NULL);
int t = 1;
//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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |