Submission #1235406

#TimeUsernameProblemLanguageResultExecution timeMemory
1235406hugo_pmNile (IOI24_nile)C++20
67 / 100
2096 ms11324 KiB
#include "nile.h" #include <bits/stdc++.h> using namespace std; #define int long long using i32 = signed; struct Query { int dis, id_qry; auto operator<=>(const Query&) const = default; }; struct Artifact { int weight, value; auto operator<=>(const Artifact&) const = default; }; int solve(const vector<Artifact> &arts, int dis) { int nb_arts = arts.size(); vector<int> dp(nb_arts+1, 0); deque<Artifact> stk; for (int i = nb_arts-1; i >= 0; --i) { dp[i] = dp[i+1]; while (!stk.empty() && stk.front().weight - arts[i].weight > dis) stk.pop_front(); if (!stk.empty()) dp[i] = max(dp[i], arts[i].value + stk.front().value); int add = arts[i].value + dp[i+1]; while (!stk.empty() && stk.back().value <= add) stk.pop_back(); stk.push_back({arts[i].weight, add}); } return dp[0]; } vector<int> solve(vector<Artifact> artifacts, vector<Query> queries) { vector<int> answer(queries.size(), 0); sort(artifacts.begin(), artifacts.end()); sort(queries.begin(), queries.end()); for (auto [dis, id_qry] : queries) { answer[id_qry] = solve(artifacts, dis); } return answer; } vector<int> calculate_costs(vector<i32> W, vector<i32> A, vector<i32> B, vector<i32> E) { int nb_artifacts = W.size(), nb_queries = E.size(); vector<Artifact> artifacts; for (int i = 0; i < nb_artifacts; ++i) { artifacts.push_back({W[i], A[i] - B[i]}); } vector<Query> queries; for (int i = 0; i < nb_queries; ++i) { queries.push_back({E[i], i}); } vector<int> answer = solve(artifacts, queries); int sum_A = accumulate(A.begin(), A.end(), 0ll); for (int &x : answer) { x = sum_A - x; } return answer; }
#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...