#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;
for(int i=1; i<=n; i++){
cin>>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));
/*for(int i=1; i<=n; i++){
for(int j=i; j<=n; j++){
mx1= max(mx1, mx(a, i, j));
}
mx1= max(mx1, mx(a, i, i));
mx1= max(mx1, mx(a, 1, i));
mx1= max(mx1, mx(a, i, n));
}*/
int l=1, r=n;
while(r-l>1){
int mid=(l+r)/2;
int m=max(mx(a,1,mid), mx(a,mid,n));
if(m>=mx1){
mx1=max(mx1,m);
l=mid;
}else{
r=mid;
}
}
}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... |