#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
/**zagaro & lauren <3**/
#define mod 1000000007 //1e9 + 7
#define pi acos(-1)
#define wl while
#define str string
#define ENDL "\n"
#define sal ' '
#define tp_set ll
#define prc(n) cout.precision(n);cout<<fixed;
#define ord_set tree<tp_set, null_type, less<tp_set>, rb_tree_tag, tree_order_statistics_node_update>
typedef long long ll;
typedef bool bl;
typedef char car;
using namespace std;
using namespace __gnu_pbds;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
ll n, d, x, l, r, m, X;
cin>>n>>d;
vector<ll> dp(1, 0);
vector<pair<ll,ll> > sm(1,{0, d});
for(int i=1;i<=n;i++){
cin>>x;
X = x+d;
do{
l=0;r=dp.size();
wl(l<r-1){
m = (l+r)/2;
if(dp[m] >= X)r=m;
else l=m;
}
if(sm[r-1].first == 0)break;
X = x+sm[r-1].first;
}while(X < dp[r-1]);
if(r == dp.size()){
if(sm[r-1].first == 0){
dp.push_back(dp[r-1]+1);
sm.push_back({dp[r-1]+1-x, d});
}
else {
dp.push_back(X);
sm.push_back(sm[r-1]);
}
}
else {
if(X == dp[r-1]){
if(sm[r-1].second > sm[r-1].first){
if(r == dp.size()){
dp.push_back(X+1);
sm.push_back({sm[r-1].first+1, sm[r-1].second});
}
else {
dp[r] = X+1;
sm[r] = {sm[r-1].first+1, sm[r-1].second};
}
}
}
else {
if(r == dp.size()){
dp.push_back(X);
sm.push_back(sm[r-1]);
}
else {
dp[r] = X;
sm[r] = sm[r-1];
}
}
}
dp[r] = X;sm[r] = sm[r-1];
l=0;r=dp.size();
wl(l<r-1){
m = (l+r)/2;
if(dp[m] >= x)r=m;
else l=m;
}
if(sm[r-1].first == 0){
dp[r] = x;
sm[r] = {0, d};
}
else {
dp[r] = x;
sm[r] = {sm[r-1].first, min(x-1-dp[r-1]+sm[r-1].first, min(d, sm[r-1].second))};
}
}
cout<<dp.size()-1<<ENDL;
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... |