Submission #1181749

#TimeUsernameProblemLanguageResultExecution timeMemory
1181749sagnbaevvNile (IOI24_nile)C++17
0 / 100
2096 ms6304 KiB
#include <bits/stdc++.h> using namespace std; static const long long INF = 1LL<<60; vector<int> calculate_costs(vector<int> W, vector<int> A, vector<int> B, vector<int> D){ int N = W.size(); int Q = D.size(); vector<long long> save(N); for(int i=0; i<N; i++){ save[i] = A[i] - B[i]; } vector<int> idx(N); iota(idx.begin(), idx.end(), 0); sort(idx.begin(), idx.end(), [&](int p, int q){ return W[p] < W[q]; }); vector<long long> Ws(N), Sv(N); for(int i=0; i<N; i++){ Ws[i] = W[idx[i]]; Sv[i] = save[idx[i]]; } long long sumA = 0; for(int i=0; i<N; i++){ sumA += A[i]; } vector<int> result; for(int qi=0; qi<Q; qi++){ long long d = D[qi]; vector<long long> dp(N+1, 0LL); long long bestVal = -INF; int leftPtr = 0; for(int k=1; k<=N; k++){ while(Ws[k-1] - Ws[leftPtr] > d){ leftPtr++; } bestVal = -INF; for(int i=leftPtr; i<k-1; i++){ long long cand = dp[i] + Sv[i]; if(cand > bestVal) bestVal = cand; } dp[k] = dp[k-1]; if(bestVal != -INF){ long long possible = bestVal + Sv[k-1]; if(possible > dp[k]) dp[k] = possible; } } long long totalSaving = dp[N]; long long cost = sumA - totalSaving; result.push_back((int)cost); } return result; }
#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...