#include <bits/stdc++.h>
#define fi first
#define se second
#define int long long
using namespace std;
using ll = long long;
using ii = pair<int,int>;
using pii = pair<int,ii>;
using aa = array<int,4>;
const int N = 2e5+5;
const int INF = 1e9;
const int MOD = 998244353;
int n,m,x,ans = 0;
int a[N],b[N],A[N],dp[N],t[N * 8],pre[N],LIS[N];
vector <int> v;
void update(int id,int l,int r,int pos,int val){
if (r < pos || l > pos) return;
if (l == r){
t[id] = max(t[id],val);
return;
}
int mid = (l + r) >> 1;
update(id*2,l,mid,pos,val);
update(id*2+1,mid+1,r,pos,val);
t[id] = max(t[id*2],t[id*2+1]);
}
int get(int id,int l,int r,int u,int v){
if (r < u || l > v) return 0;
if (u <= l && r <= v) return t[id];
int mid = (l + r) >> 1;
return max(get(id*2,l,mid,u,v),get(id*2+1,mid+1,r,u,v));
}
int calc(int val){
return lower_bound(v.begin(),v.end(),val) - v.begin();
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> n >> x;
for (int i = 1; i <= n; i++){
cin >> a[i];
A[i] = a[i] + x;
v.push_back(a[i]);
v.push_back(A[i]);
}
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());
m = (int)v.size();
for (int i = 1; i <= n; i++) a[i] = calc(a[i]) + 1;
for (int i = 1; i <= n; i++) A[i] = calc(A[i]) + 1;
for (int i = 1; i <= n; i++){
int j = lower_bound(b+1,b+1+ans,a[i]) - b;
dp[i] = j;
b[j] = a[i];
ans = max(ans,j);
}
ans = 0;
for (int i = 1; i <= n; i++) b[i] = 0;
for (int i = n; i >= 1; i--){
int j = lower_bound(b+1,b+1+ans,-a[i]) - b;
LIS[i] = j;
b[j] = -a[i];
ans = max(ans,j);
}
ans = 0;
for (int i = 0; i < n; i++){
update(1,1,m,a[i],dp[i]);
int tmp = get(1,1,m,1,A[i+1]-1);
ans = max(ans,tmp + LIS[i+1]);
}
cout << ans;
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... |