#include <bits/stdc++.h>
#define int long long
using namespace std;
class SegTree {
private:
int sz;
vector<int> tree;
public:
SegTree(int len):sz(len),tree(4*len,0){}
void update(int ind,int val) {
ind+=sz;
tree[ind] = max(tree[ind],val);
while (ind>1) {
ind>>=1;
tree[ind] = max(tree[ind*2],tree[ind*2+1]);
}
}
int query(int l,int r) {
l+=sz; r+=sz;
int res=0;
while (l<=r) {
if (l&1) res = max(res,tree[l++]);
if (!(r&1)) res = max(res,tree[r--]);
l>>=1; r>>=1;
}
return res;
}
} ;
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
//freopen("warm.in","r",stdin);
int n,x; cin>>n>>x;
vector<pair<int,int>> a(n);
vector<int> all;
for (auto &i:a) {
cin>>i.first;
i.second = i.first+x;
all.push_back(i.first);
all.push_back(i.first+x);
}
sort(begin(all),end(all));
for (auto &i:a) {
i.first = lower_bound(begin(all),end(all),i.first)-begin(all)+1;
i.second = lower_bound(begin(all),end(all),i.second)-begin(all)+1;
}
SegTree segtree(2*n+2);
//for (auto i:a) cout<<i.first<<" "<<i.second<<endl;
for (int i=0;i<n;i++) {
int mx=segtree.query(0,a[i].second-1);
segtree.update(a[i].second,mx+1);
mx = segtree.query(0,a[i].first-1);
segtree.update(a[i].first,mx+1);
}
cout<<segtree.query(1,2*n);
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... |