前缀和 + 二分
又是没有独立做出来的一道题目…
// 前缀和 + 二分
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 10;
int n, q;
ll a[N], sum[N];
int main()
{
scanf("%d%d", &n, &q);
for(int i = 1; i <= n; ++ i) scanf("%lld", &a[i]);
for(int i = 1; i < n; ++ i) a[i] = a[i + 1] - a[i];
-- n;
sort(a + 1, a + 1 + n);
// 前缀和
for(int i = 1; i <= n; ++ i) sum[i] = sum[i - 1] + a[i]; // 第i条说说时,前面总共休息(准备睡觉+睡着)了多久
while(q --)
{
int k, t; // 准备时间, 最少睡着时间
scanf("%d%d", &k, &t);
if(k > a[n])
{
puts("No"); // 最长的休息时间都没能入睡
continue;
}
int pos = lower_bound(a + 1, a + 1 + n, k) - a; // 满足入睡时长的下标
if( (sum[n] - sum[pos - 1]) - 1ll * k * (n - pos + 1) >= t) puts("Yes");
else puts("No");
}
return 0;
}