#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6;
struct Segment_Tree
{
int st[(maxn + 7)*4];
void update(int id , int l , int r , int pos , int val)
{
if(r < pos || l > pos) return;
if(l == r)
{
st[id] = max(st[id] , val);
return;
}
int mid = (l+r) >> 1;
update(id*2 , l , mid , pos , val);
update(id*2+1, mid+1 , r , pos , val);
st[id] = max(st[id*2] , st[id*2+1]);
}
int get(int id , int l , int r, int u , int v)
{
if(r < u || l > v) return -1;
if(u <= l && r <= v) return st[id];
int mid = (l+r) >> 1;
return max(get(id*2 , l , mid , u , v) , get(id*2+1 , mid+1 , r , u , v));
}
} ST;
int n , x , a[maxn] , lis[maxn];
vector <int> val;
void compress()
{
for(int i = 1; i <= n; i++)
{
val.push_back(a[i] + 1);
val.push_back(a[i] + 1 - x);
val.push_back(a[i]);
}
sort(val.begin() , val.end());
val.erase(unique(val.begin() , val.end()) , val.end());
}
int encode(int x)
{
return (int)(upper_bound(val.begin() , val.end() , x) - val.begin());
}
void build()
{
vector <int> LIS;
for(int i = 1; i <= n; i++)
{
int pos = lower_bound(LIS.begin() , LIS.end() , a[i]) - LIS.begin();
if(pos == LIS.size())
{
LIS.push_back(a[i]);
lis[i] = LIS.size();
}
else
{
LIS[pos] = a[i];
lis[i] = pos + 1;
}
}
}
void solve()
{
cin >> n >> x;
for(int i = 1; i <= n; i++) cin >> a[i];
compress();
build();
int ans = 1;
for(int i = n; i >= 1; i--)
{
int res = lis[i] + ST.get(1 , 1 , maxn , encode(a[i]+1-x) , maxn);
ans = max(ans , res);
int upd = ST.get(1 , 1 , maxn , encode(a[i] + 1) , maxn);
ST.update(1, 1 , maxn , encode(a[i]) , upd + 1);
}
cout << ans << '\n';
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
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... |