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<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
long long a,b,i,j,t,p,q,m,n,s,x[160001],y[160001];
main()
{
    scanf("%lld%lld",&a,&b);
    for(i=0;i<a;i++)
    {
        scanf("%lld",&x[i]);
    }
    std::sort(x,x+a);
    for(i=0;i<a-1;i++)
    {
        p=q=0;
        if(i-1>=0)
        {
            if(x[i]-x[i-1]<b)p=b-(x[i]-x[i-1]);
        }
        if(i+2<a)
        {
            if(x[i+2]-x[i+1]<b)q=b-(x[i+2]-x[i+1]);
        }
        if(p+q>=x[i+1]-x[i])s+=x[i+1]-x[i];
        else if(b>=x[i+1]-x[i])
        {
            s+=x[i+1]-x[i];
        }
        else if(2*b<=x[i+1]-x[i])s+=p+q;
        else
        {
            t=b*2-(x[i+1]-x[i]);
            m=x[i]+b-t;
            n=x[i]+b;
            p=p+x[i];
            q=x[i+1]-q;
            if(p<m&&n<q)
            {
                s+=(p-x[i]+x[i+1]-q+t);
            }
            else if(n<=p||q<=m)
            {
                s+=(p-x[i]+x[i+1]-q);
            }
            else if(m<=p&&q<=n)
            {
                s+=x[i+1]-x[i];
            }
            else if(m<=p&&p<=n)
            {
                s+=(n-x[i]+x[i+1]-q);
            }
            else if(m<=q&&q<=n)
            {
                s+=(p-x[i]+x[i+1]-m);
            }
        }
    }
    if(x[1]-x[0]<b)
    {
        s+=b-(x[1]-x[0]);
    }
    if(x[a-1]-x[a-2]<b)
    {
        s+=b-(x[a-1]-x[a-2]);
    }
    if(a==1)printf("0");
    else printf("%lld",s);
}
| # | 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... |