发生了一件有趣的事情:不开 long long 95 pts WA on #16,开了 long long 后就只有 90 pts 了……
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll N = 4e5 + 5;
ll n, m, l[N], r[N], cnt[N], s1[N], s2[N], ans;
vector <ll> v;
ll id(ll x) {
return lower_bound(v.begin(), v.end(), x) - v.begin();
}
int main() {
cin >> n >> m;
for(int i = 1; i <= n; i++) {
cin >> l[i];
r[i] = l[i] + m;
v.push_back(l[i]);
v.push_back(r[i]);
}
sort(l + 1, l + n + 1);
sort(r + 1, r + n + 1);
sort(v.begin(), v.end());
for(int i = 1; i <= n; i++) {
cnt[id(l[i])]++;
cnt[id(r[i])]--;
}
for(int i = 0; i < 2 * n; i++) {
if(i) {
cnt[i] += cnt[i - 1];
s1[i] = s1[i - 1];
s2[i] = s2[i - 1];
}
if(cnt[i] == 1) s1[i] += v[i + 1] - v[i];
if(cnt[i] == 2) s2[i] += v[i + 1] - v[i];
}
ans = s1[2 * n - 1];
for(int i = 1; i <= n; i++) {
ll tmp = s1[2 * n - 1] - (s1[id(r[i]) - 1] - s1[id(l[i]) - 1]) + (s2[id(r[i]) - 1] - s2[id(l[i]) - 1]) + m;
ans = max(ans, tmp);
}
cout << ans;
return 0;
}