Submission #993499

#TimeUsernameProblemLanguageResultExecution timeMemory
993499DBuchBofA Plus B (IOI23_aplusb)C++17
100 / 100
37 ms5956 KiB
#include "aplusb.h" #include <queue> #define NMAX 100000 int *A, *B; int sum(int p[2]) {return A[p[0]] + B[p[1]];} int pair[2*NMAX][2]; struct compareSum { bool operator() (int below, int above) { return sum(pair[below]) > sum(pair[above]); } }; std::vector<int> smallest_sums(int N, std::vector<int> vectorA, std::vector<int> vectorB) { A = vectorA.data(); B = vectorB.data(); for (int i = 0; i != N-1; ++i) pair[i][0] = N-1 - i; for (int i = N; i != 2*N - 1; ++i) pair[i][1] = i - N+1; std::vector<int> result(N); std::priority_queue<int, std::vector<int>, compareSum> next; next.push(N - 1); int idx = 0; while (true) { int node = next.top(); next.pop(); result[idx++] = sum(pair[node]); if (idx == N) break; if (node < 2 || pair[node - 1][1] == pair[node - 2][1]) next.push(node - 1); if (node > 2*N - 4 || pair[node + 1][0] == pair[node + 2][0]) next.push(node + 1); ++pair[node][0]; ++pair[node][1]; } 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...