Submission #1210696

#TimeUsernameProblemLanguageResultExecution timeMemory
1210696AvianshNile (IOI24_nile)C++20
17 / 100
2095 ms11592 KiB
#include "nile.h"
#include <bits/stdc++.h>

using namespace std;

vector<long long> calculate_costs(vector<int> W, vector<int> A, vector<int> B, vector<int> E) {
    int n = A.size();
    vector<array<long long,3>>boxes(n);
    for(int i = 0;i<n;i++){
        boxes[i]={W[i],A[i],B[i]};
    }
    sort(boxes.begin(),boxes.end());
    int q = (int)E.size();
    vector<long long>ans(q);
    int prefa[n];
    prefa[0]=boxes[0][1];
    for(int i = 1;i<n;i++){
        prefa[i]=prefa[i-1]+boxes[i][1];
    }
    for(int z = 0;z<q;z++){
        int d = E[z];
        long long dp[n];
        dp[0]=boxes[0][1];
        multiset<long long>vals;
        int x = 0;
        vals.insert(1LL*boxes[0][2]-prefa[0]);
        long long valarr[n];
        valarr[0]=1LL*boxes[0][2]-prefa[0];
        for(int i = 1;i<n;i++){
            dp[i]=dp[i-1]+boxes[i][1];

            while(boxes[x][0]<boxes[i][0]-d){
                vals.erase(vals.find(valarr[x]));
                x++;
            }

            if(vals.size())
                dp[i]=min(dp[i],1LL*boxes[i][2]+prefa[i-1]+(*vals.begin()));
            vals.insert(dp[i-1]+1LL*boxes[i][2]-prefa[i]);
            valarr[i]=dp[i-1]+1LL*boxes[i][2]-prefa[i];
        }
        ans[z]=dp[n-1];
    }
    return ans;
}
#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...