Submission #1188503

#TimeUsernameProblemLanguageResultExecution timeMemory
1188503user736482Marathon Race 2 (JOI24_ho_t3)C++20
100 / 100
402 ms38224 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...