This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct FenwickTree{
int n;
vector<int> t;
void init(int _n){
n=_n;
t.assign(n+1, 0);
}
void update(int pos, int val){
for (int i=pos; i<=n; i+=i&(-i)) t[i]=max(t[i], val);
}
int get(int pos){
int ans=0;
for (int i=pos; i; i-=i&(-i)) ans=max(ans, t[i]);
return ans;
}
} bit[2];
const int N=2e5+10;
int n, x, a[N];
int32_t main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> x;
for (int i=1; i<=n; ++i) cin >> a[i];
vector<int> vals{-1};
for (int i=1; i<=n; ++i) vals.push_back(a[i]);
sort(vals.begin(), vals.end());
vals.resize(unique(vals.begin(), vals.end())-vals.begin());
bit[0].init((int)vals.size()-1);
bit[1].init((int)vals.size()-1);
for (int i=1; i<=n; ++i){
int pi=lower_bound(vals.begin(), vals.end(), a[i])-vals.begin();
int pid=lower_bound(vals.begin(), vals.end(), a[i]+x)-vals.begin();
int f0=bit[0].get(pi-1)+1;
int f1=max(bit[1].get(pi-1)+1, bit[0].get(pid-1)+1);
bit[0].update(pi, f0);
bit[1].update(pi, f1);
}
cout << max(bit[0].get((int)vals.size()-1), bit[1].get((int)vals.size()-1)) << '\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... |