#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, x;
int mx(vector<int>a, int l, int r){
vector<int>dp;
for(int i=1; i<=n; i++){
if(i>=l && i<=r){
int pos=lower_bound(dp.begin(),dp.end(), a[i]+x)-dp.begin();
if(pos==dp.size()){
dp.push_back(a[i]+x);
}else{
dp[pos]=a[i]+x;
}
}else{
int pos=lower_bound(dp.begin(),dp.end(), a[i])-dp.begin();
if(pos==dp.size()){
dp.push_back(a[i]);
}else{
dp[pos]=a[i];
}
}
}return dp.size();
}
int32_t main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin>>n>>x;
vector<int> a(n+1);
int mx2=0, mn=1e9;
for(int i=1; i<=n; i++){
cin>>a[i];
mn=min(mn, a[i]);
mx2=max(mx2, a[i]);
}int mx1=0;
x=min(x, mx2);
if(x==0){
mx1= max(mx1, mx(a, 0, 0));
}
else{
mx1= max(mx1, mx(a, 0, 0));
vector<int>q;
for(int i=1; i<=3*n/4; i++){
//q.push_back(mx(a, i, n));
mx1= max(mx1, mx(a, i, n));
}//for(auto e: q)cout<<e<<" ";
}cout<<mx1<<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... |