Submission #860597

#TimeUsernameProblemLanguageResultExecution timeMemory
860597E869120Uplifting Excursion (BOI22_vault)C++14
20 / 100
1759 ms47556 KiB
#include <bits/stdc++.h> using namespace std; vector<long long> solve(long long N, long long LIM, vector<long long> List) { vector<long long> dp(LIM + 1, -(1LL << 60)); dp[0] = 0; // DP Start for (int i = 0; i < N; i++) { vector<long long> ndp(LIM + 1, -(1LL << 60)); long long kazu = i + 1; for (int j = 0; j < kazu; j++) { vector<pair<long long, long long>> maxi; int cur = 0; for (int k = j; k <= LIM; k += kazu) { long long val = dp[k] - (k / kazu); while (maxi.size() >= cur + 1) { if (maxi[maxi.size() - 1].second <= val) maxi.pop_back(); else break; } maxi.push_back(make_pair(1LL * k, val)); if (maxi[cur].second >= -(1LL << 59)) ndp[k] = maxi[cur].second + (k / kazu); while (cur < (int)maxi.size() && maxi[cur].first <= k - 1LL * kazu * List[i]) cur += 1; } } dp = ndp; } // Return return dp; } int main() { // Step 1. Input long long M, L; cin >> M >> L; vector<long long> A(2 * M + 1, 0); for (int i = 0; i <= 2 * M; i++) cin >> A[i]; // Step 2. Calculate vector<long long> A1; vector<long long> A2; for (int i = M - 1; i >= 0; i--) A1.push_back(A[i]); for (int i = M + 1; i <= 2 * M; i++) A2.push_back(A[i]); vector<long long> DP1 = solve(M, 700000, A1); vector<long long> DP2 = solve(M, 700000, A2); // Step 3. Output long long Answer = -(1LL << 60); for (long long i = 0; i <= 700000LL - abs(L); i++) { long long idx1 = i; long long idx2 = i + abs(L); if (L < 0) swap(idx1, idx2); Answer = max(Answer, DP1[idx1] + DP2[idx2]); } if (Answer < 0LL) cout << "impossible" << endl; else cout << Answer + A[M] << endl; return 0; }

Compilation message (stderr)

vault.cpp: In function 'std::vector<long long int> solve(long long int, long long int, std::vector<long long int>)':
vault.cpp:17:36: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   17 |                 while (maxi.size() >= cur + 1) {
      |                        ~~~~~~~~~~~~^~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...