Submission #1292574

#TimeUsernameProblemLanguageResultExecution timeMemory
1292574green_gold_dogStone Arranging 2 (JOI23_ho_t1)C++17
100 / 100
62 ms27428 KiB
#include <bits/stdc++.h> using namespace std; struct Block { long long color; int L, R; }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; if (!(cin >> N)) return 0; vector<long long> A(N + 1); for (int i = 1; i <= N; ++i) cin >> A[i]; vector<Block> blocks; blocks.reserve(N); // Для каждого цвета: стек индексов блоков с этим цветом unordered_map<long long, vector<int>> pos; pos.reserve(N * 2); for (int i = 1; i <= N; ++i) { long long c = A[i]; if (blocks.empty()) { // Первый камень blocks.push_back({c, i, i}); pos[c].push_back(0); // индекс блока 0 continue; } int tail = (int)blocks.size() - 1; if (blocks[tail].color == c) { // Продлеваем последний блок blocks[tail].R = i; continue; } // Добавляем новый блок для камня i blocks.push_back({c, i, i}); int new_idx = (int)blocks.size() - 1; auto &st = pos[c]; st.push_back(new_idx); // Проверяем, был ли цвет c раньше до камня i if ((int)st.size() >= 2) { int prev_block_idx = st[(int)st.size() - 2]; // блок с последним вхождением c до i int old_tail = new_idx; // Удаляем все блоки после prev_block_idx (суффикс) for (int x = old_tail; x > prev_block_idx; --x) { long long colx = blocks[x].color; auto &stx = pos[colx]; if (!stx.empty() && stx.back() == x) { stx.pop_back(); } } // Сжимаем массив блоков до prev_block_idx + 1 blocks.resize(prev_block_idx + 1); // Расширяем этот блок до позиции i blocks[prev_block_idx].R = i; // В стеке цвета c теперь последний блок — prev_block_idx (он и должен быть последним) } } // Восстанавливаем итоговые цвета по блокам vector<long long> ans(N + 1); for (const auto &b : blocks) { for (int i = b.L; i <= b.R; ++i) { ans[i] = b.color; } } for (int i = 1; i <= N; ++i) { cout << ans[i] << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...