| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1312245 | azamurai | 9월 (APIO24_september) | C++20 | 0 ms | 0 KiB |
#include "september.h"
#include <vector>
using namespace std;
int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
vector <int> p(N + 1, 0);
vector <int> pos(N, 0);
for (int i = 0; i < N - 1; i++) {
pos[S[0][i]] = i;
}
vector <pair<int,int>> seg;
for (int i = 1; i < N; i++) {
if (F[i] == 0) continue;
if (pos[F[i]] < pos[i]) {
seg.push_back(make_pair(pos[F[i]], pos[i]));
}
}
sort(seg.begin(), seg.end());
for (int i = 0; i < N; i++) {
p[i] = i;
}
int idx = -1;
for (auto to : seg) {
int l = to.first, r = to.second;
if (idx >= l) {
for (int i = idx + 1; i <= r; i++) p[i] = p[i - 1];
idx = r;
}
else {
for (int i = l + 1; i <= r; i++) p[i] = p[i - 1];
idx = r;
}
}
set <int> st;
for (int i = 0; i < N - 1; i++) {
st.insert(p[i]);
}
return (int)st.size();
}
