Submission #1340561

#TimeUsernameProblemLanguageResultExecution timeMemory
1340561vladiliusCollecting Stamps 4 (JOI25_stamps4)C++20
100 / 100
585 ms80884 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
#define pb push_back
#define ff first
#define ss second
const ll inf = 2e18;

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int n, X; cin>>n>>X;
    int m = 2 * n;
    vector<int> a(m + 1);
    for (int i = 1; i <= m; i++){
        cin>>a[i];
    }
    vector<ll> c(m + 1);
    for (int i = 1; i <= m; i++){
        cin>>c[i];
    }
    
    vector<ll> f(m + 1);
    vector<int> l(n + 1), r(n + 1);
    int cc = 0;
    for (int i = 1; i <= m; i++){
        if (!l[a[i]]){
            l[a[i]] = i;
            cc++;
        }
        else {
            r[a[i]] = i;
            f[1] += cc;
        }
    }
    for (int i = 1; i < m; i++){
        int x = a[i];
        f[i + 1] = f[i] + n - (r[x] - i);
        l[x] = r[x]; r[x] = m + i;
    }

    vector<pll> all = {{}};
    for (int i = 1; i <= m; i++){
        all.pb({f[i], c[i]});
    }
    
    sort(all.begin() + 1, all.end());
    
    vector<ll> x(m + 1), y(m + 1);
    for (int i = 1; i <= m; i++){
        x[i] = all[i].ff;
        y[i] = all[i].ss;
    }
    vector<ll> :: iterator it;

    vector<ll> pc(m + 2); pc.back() = inf;
    for (int i = m; i > 0; i--) pc[i] = min(pc[i + 1], y[i]);
    vector<ll> pt(m + 1); pt[0] = inf;
    for (int i = 1; i <= m; i++){
        pt[i] = min(pt[i - 1], y[i] - x[i] * X);
    }
    
    int q; cin>>q;
    while (q--){
        ll k; cin>>k;
        it = upper_bound(x.begin() + 1, x.end(), k);
        int j = (int) (it - x.begin());
        cout<<min(pt[j - 1] + k * X, pc[j])<<"\n";
    }
}
#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...