#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
vector<int> alap(n);
for(int &x : alap){
cin >> x;
}
vector<vector<int>> csokk;
vector<int> hely(n);
for(int i = n - 1; i >= 0; i--){
int l = 0, r = csokk.size() - 1;
int ind = -1;
while(l <= r){
int k = (l + r) / 2;
if(alap[i] > csokk[k].back()){
ind = k;
r = k - 1;
} else{
l = k + 1;
}
}
if(ind == -1){
hely[i] = csokk.size();
csokk.push_back(vector<int>({alap[i]}));
} else{
csokk[ind].push_back(alap[i]);
hely[i] = ind;
}
}
vector<int> index(csokk.size());
for(int i = 0; i < csokk.size(); i++){
index[i] = csokk[i].size() - 1;
}
int ans = 0;
//int hossz = csokk.size();
vector<int> no;
for(int i = 0; i < n; i++){
/*index[hely[i]]--;
if(index[hely[i]] == -1){
hossz--;
}*/
csokk[hely[i]].pop_back();
if(csokk.back().size() == 0){
csokk.pop_back();
}
auto it = lower_bound(no.begin(), no.end(), alap[i]);
if(it == no.end()){
no.push_back(alap[i]);
} else{
*it = alap[i];
}
int l = 0, r = csokk.size() - 1;
int ind = -1;
while(l <= r){
int k = (l + r) / 2;
if(no.back() - m < csokk[k].back()){
ind = k;
l = k + 1;
} else{
r = k - 1;
}
}
ans = max(ans, (int)no.size() + ind + 1);
}
cout << no.size() << "\n";
//cout << ans << "\n";
}
| # | 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... |