# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
100782 | 2019-03-14T10:45:22 Z | JPN20 | Candies (JOI18_candies) | C++17 | 49 ms | 504 KB |
#include <bits/stdc++.h> using namespace std; struct Node{ vector<long long> p[4]; }; vector<long long> check(vector<long long>A, vector<long long>B) { vector<long long>ans; int maxs = A.size() - 1 + B.size() - 1; for (int i = 0; i <= maxs; i++) { int L = 0, R = A.size(), c1, c2; if (i >= (int)B.size()) L = i - ((int)B.size() - 1); if (i < (int)A.size()) R = i + 1; int cl = L, cr = R; for (int j = 0; j < 30; j++) { c1 = (L + L + R) / 3; c2 = (L + R + R) / 3; long long E1 = A[c1] + B[i - c1]; long long E2 = B[c2] + B[i - c2]; if (E1 < E2) L = c1; else R = c2; } long long rets = 0; for (int j = -3; j <= 3; j++) { int ss = c1 + j; if (ss < cl || cr <= ss) continue; rets = max(rets, A[ss] + B[i - ss]); } ans.push_back(rets); } return ans; } Node calc(Node A1, Node A2) { // i = 1 or 3 : 一番後ろに飴がある // i = 2 or 3 : 一番前に飴がある Node E; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if ((i == 1 || i == 3) && (j == 2 || j == 3)) continue; vector<long long> I = check(A1.p[i], A2.p[j]); int ty = 0; if (i == 2 || i == 3) ty += 2; if (j == 1 || j == 3) ty += 1; for (int j = 0; j < (int)I.size(); j++) { if ((int)E.p[ty].size() == j) E.p[ty].push_back(I[j]); else E.p[ty][j] = max(E.p[ty][j], I[j]); } } } return E; } long long N, A[200009], C[200009]; Node solve(int l, int r) { if (l + 1 == r) { Node I; I.p[0] = {0}; I.p[1] = {0}; I.p[2] = {0}; I.p[3] = {0, A[l]}; return I; } Node LL = solve(l, (l + r) / 2); Node RR = solve((l + r) / 2, r); return calc(LL, RR); } int main() { scanf("%lld", &N); for (int i = 1; i <= N; i++) scanf("%lld", &A[i]); Node T = solve(1, N + 1); for (int i = 0; i < 4; i++) { for (int j = 0; j < T.p[i].size(); j++) C[j] = max(C[j], T.p[i][j]); } for (int i = 1; i <= (N + 1) / 2; i++) printf("%lld\n", C[i]); return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 49 ms | 504 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 49 ms | 504 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |