#pragma GCC optimize("Ofast","unroll-loops","inline")
//#pragma GCC target("avx2")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define pb push_back
#define ff first
#define ss second
#define MOD 1000000009
#define INF 1000000019
#define INFL 1000000000000000099LL
#define POT (1<<20)
ll a,b,r,c,t,n,m,l,q,k,ak,ans,s;
map<ll,ll>mp;
vector<pair<ll,ll>>v,v2;
vector<ll> pref={0};
ll dp[1007][1007][2][2];
int main()
{
ios_base::sync_with_stdio(0);cin.tie(0);
cin>>n>>a;
for(ll i=0;i<n;i++){
cin>>a;
mp[a]++;
}
for(auto it=mp.begin();it!=mp.end();it++){
b++;
v.pb((*it));
}
sort(v.begin(),v.end());
for(pair<ll,ll>i : v){
pref.pb(pref.back()+i.ss);
}
v2=v;
reverse(v2.begin(),v2.end());
if(b>1000){
cin>>q;
for(ll i=0;i<q;i++){
cout<<"No"<<"\n";
}
return 0;
}
for(ll i=0;i<1007;i++){
for(ll j=0;j<1007;j++){
for(ll k=0;k<2;k++)
for(ll p=0;p<2;p++)
dp[i][j][k][p]=INFL;
}
}
dp[1][0][1][1]=v[0].ss;
dp[0][1][0][0]=v2[0].ss;
for(ll i=0;i<=v.size();i++){
for(ll j=0;j+i<=v.size();j++){
for(ll k=0;k<2;k++){
if(i>1)
dp[i][j][1][k]=min(dp[i][j][1][k],v[i-1].ss+dp[i-1][j][1][k]+abs(v[i-1].ff-v[i-2].ff)*(1+pref[i-1]+pref.back()-pref[pref.size()-1-j]));
if(i&&j)
dp[i][j][1][k]=min(dp[i][j][1][k],v[i-1].ss+dp[i-1][j][0][k]+abs(v[v.size()-j].ff-v[i-1].ff)*(1+pref[i-1]+pref.back()-pref[pref.size()-1-j]));
if(j>1)
dp[i][j][0][k]=min(dp[i][j][0][k],v2[j-1].ss+dp[i][j-1][0][k]+abs(v2[j-1].ff-v2[j-2].ff)*(1+pref[i]+pref.back()-pref[pref.size()-j]));
if(j&&i)
dp[i][j][0][k]=min(dp[i][j][0][k],v2[j-1].ss+dp[i][j-1][1][k]+abs(v2[v.size()-i].ff-v2[j-1].ff)*(1+pref[i]+pref.back()-pref[pref.size()-j]));
}
}
}
cin>>q;
for(ll i=0;i<q;i++){
cin>>a>>b>>c;
ll pom=lower_bound(v.begin(),v.end(),(pair<ll,ll>){b,0})-v.begin();
ll ans=INFL;
if(pom!=v.size()){
ans=min(ans,dp[pom][v.size()-pom][0][0]+abs(v.back().ff-a)+(n+1)*abs(v[pom].ff-b));
ans=min(ans,dp[pom][v.size()-pom][0][1]+abs(v[0].ff-a)+(n+1)*abs(v[pom].ff-b));
}
if(pom){
ans=min(ans,dp[pom][v.size()-pom][1][0]+abs(v.back().ff-a)+(n+1)*abs(v[pom-1].ff-b));
ans=min(ans,dp[pom][v.size()-pom][1][1]+abs(v[0].ff-a)+(n+1)*abs(v[pom-1].ff-b));
}
if(ans<=c){
cout<<"Yes\n";
}
else{
cout<<"No\n";
}
}
return 0;
}
# | 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... |