#include <bits/stdc++.h>
#ifdef LOCAL
#include "Debug.h"
#else
#define debug(...) 42
#endif
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, l;
cin >> n >> l;
if (n > 2000)
return 0;
vector<int> a(n);
for (int &x : a)
cin >> x;
sort(begin(a), end(a));
auto isGood = [&](int from, int to, int oo)
{
vector<vector<int>> f(n, vector<int>(n, oo));
for (int i = 0; i < n; i++)
f[i][i] = min(abs(to - a[i]) * (n + 1), oo);
for (int len = 2; len <= n; len++)
for (int i = 0; i + len <= n; i++)
{
int j = i + len - 1, weight = n - (len - 1) + 1;
f[i][j] = min(f[i][j], f[i + 1][j] + (a[i + 1] - a[i]) * weight);
f[i][j] = min(f[i][j], f[j][i + 1] + (a[j] - a[i]) * weight);
f[j][i] = min(f[j][i], f[j - 1][i] + (a[j] - a[j - 1]) * weight);
f[j][i] = min(f[j][i], f[i][j - 1] + (a[j] - a[i]) * weight);
}
int res = min(f[0][n - 1] + abs(from - a[0]), f[n - 1][0] + abs(from - a[n - 1])) + n;
return res < oo;
};
int q;
cin >> q;
while (q--)
{
int s, g, t;
cin >> s >> g >> t;
cout << (isGood(s, g, t + 1) ? "Yes" : "No") << '\n';
}
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |