思路:

Fluctuation Limit_ios

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <vector>
#include <map>
#include <queue>
#include <set>
#include <ctime>
#include <cstring>
#include <cstdlib>
#include <math.h>
using namespace std;
typedef long long ll;
//#define ll long long
const ll N = 2009;
const ll maxn = 1e5 + 20;
const ll mod = 1000000007;
ll inv[maxn], vis[maxn], dis[maxn], head[maxn];
ll fac[maxn], a[maxn], q[maxn], b[N], c[N], pre[maxn];
vector<ll> vec;
//typedef pair<ll, ll> p;
//priority_queue<p, vector<p>, greater<p> > m;
// ll sum[maxn], a[maxn];
ll max(ll a, ll b) { return a > b ? a : b; }
ll min(ll a, ll b) { return a < b ? a : b; }
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
ll lcm(ll a, ll b) { return a * b / gcd(a, b); }
map<ll, ll> mp;
ll ksm(ll a, ll b)
{
a %= mod;
ll ans = 1ll;
while (b)
{
if (b & 1)
ans = (ans * a) % mod;
a = (a * a) % mod;
b >>= 1ll;
}
return ans;
}
ll dp[maxn][2][2], cnt, num[2], ans;
struct node
{
ll x, y;
} p[maxn];
ll l[maxn], r[maxn];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
ll t, n, m, k;
cin >> t;
while (t--)
{
cin >> n >> k;
for (int i = 1; i <= n; i++)
cin >> l[i] >> r[i];
for (int i = 2; i <= n; i++)
{
l[i] = max(l[i - 1] - k, l[i]);
r[i] = min(r[i - 1] + k, r[i]);
}
for (int i = n - 1; i >= 1; i--)
{
l[i] = max(l[i + 1] - k, l[i]);
r[i] = min(r[i + 1] + k, r[i]);
}
bool fla = true;
for (int i = 1; i <= n; i++)
{
if (l[i] > r[i])
{
fla = false;
break;
}
}
if (fla)
{
cout << "YES" << endl;
for (int i = 1; i <= n; i++)
cout << (l[i]+r[i])/2 << ' ';
cout << endl;
}
else
{
cout << "NO" << endl;
}
}
}