Submission #1230922

#TimeUsernameProblemLanguageResultExecution timeMemory
1230922sahasradNile (IOI24_nile)C++20
23 / 100
2094 ms14388 KiB
#include <bits/stdc++.h>
#define pii pair<int, int>
typedef long long ll;

using namespace std;

vector<ll> calculate_costs(vector<int> W, vector<int> A, vector<int> B, vector<int> E) {
    int n = W.size();
    int q = E.size();

    vector<vector<int>> arr(n, vector<int>(3));
    for (int i = 0; i < n; i++) {
        arr[i][0] = W[i];
        arr[i][1] = A[i];
        arr[i][2] = B[i];
    }

    sort(arr.begin(), arr.end(), [](const vector<int>& a, const vector<int>& b) {
        return a[0] < b[0];
    });

    vector<ll> ans(q);
    for (int qi = 0; qi < q; qi++) {
        int d = E[qi];
        ll sum = 0;
        vector<ll> dp(n);
        queue<pii> queue;
        multiset<ll> qVal;

        for (int i = 0; i < n; i++) {
            int w = arr[i][0], a = arr[i][1], b = arr[i][2];
            while (!queue.empty() && queue.front().first < w - d) {
                auto [w2, val] = queue.front();
                queue.pop();
                qVal.erase(qVal.find(val));
            }
            ll last = i == 0 ? 0 : dp[i - 1];
            dp[i] = last + a;
            if (!queue.empty()) {
                dp[i] = min(dp[i], *qVal.begin() + sum + b);
            }
            sum += a;
            ll val = last + b - sum;
            queue.push({w, val});
            qVal.insert(val);
        }

        ans[qi] = dp[n - 1];
    }

    return ans;
}

// int main() {
//     ios::sync_with_stdio(false);
//     cin.tie(nullptr);

//     int n, q;
//     cin >> n >> q;
//     vector<int> W(n), A(n), B(n), E(q);
//     for (int i = 0; i < n; i++) {
//         cin >> W[i];
//     }
//     for (int i = 0; i < n; i++) {
//         cin >> A[i];
//     }
//     for (int i = 0; i < n; i++) {
//         cin >> B[i];
//     }
//     for (int i = 0; i < q; i++) {
//         cin >> E[i];
//     }

//     vector<ll> result = calculate_costs(W, A, B, E);
//     for (ll cost : result) {
//         cout << cost << "\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...
#Verdict Execution timeMemoryGrader output
Fetching results...