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... |