#include <bits/stdc++.h>
#define int long long
using namespace std;
#define endl '\n'
void work()
{
    int n , x ; cin >> n >> x ;
    vector<int>a(n + 1 , -999);
    for(int i = 1 ; i <= n ; i++)
    {
        cin >> a[i];
    }
    vector<int>b = a ; //把代码分解成为两个部分,一部分用于计算使结果最大情况,一部分用于记录最小情况
    int maxi = 0 ; //记录最大值
    int minn = 0 ; //记录最小值


    for(int i = 1 ; i <= n ; i++)
    {
        if(i == 1 && a[i] == -999)//首先对于第一个数字进行检验,因为第一个数字前面没有数字,所以为-999时,应该尽量为后来做贡献
        {
            a[i] = 50 ; 
        }
        else
        {
            if(a[i] != -999 && a[i - 1] != -999)//遇到最为普遍的情况时
            {
                if(a[i - 1] - a[i] >= x)
                {
                    maxi++;
                }
            }
            if(a[i] == -999)//当遇到-999时
            {
                if(a[i - 1] - x >= -50)//如果它可以为前面做贡献时,尽可能让他为前面做贡献
                {//由于想要尽量为后来做贡献,所以刚刚达到标准即可
                    a[i] = a[i - 1] - x ; 
                    maxi++;
                }
                else//发现不能为前面做贡献,所以为后来做准备
                {
                    a[i] = 50 ; 
                }
            }
        }
    }

//同理
    for(int i = 1 ; i <= n ; i++)
    {
        if(i == 1 && b[i] == -999)
        {
            b[i] = -50 ; 
        }
        else
        {
            if(b[i] != -999 && b[i - 1] != -999 && b[i - 1] - b[i] >= x)
            {
                minn++;
            }
            if(b[i] == -999)
            {
                if(b[i - 1] - x + 1 >= -50)
                {
                    b[i] = b[i - 1] - x + 1 ; 
                }
                else
                {
                    b[i] = -50 ; 
                }
            }
        }
    }



    cout << maxi << " " << minn << endl ; 
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t = 1 ;
    while(t--)
    {
        work();
    }
    return 0 ; 
}

由于数据量较小的原因,我们可以采取这种做法