int main() {
size_t n, q;
cin >> n >> q;
char action;
int big;
int lesser;
deque result;
if (n == 1) {
for (size_t i = 0; i < q; ++i) {
cin >> action >> big;
result.push_back(big);
}
}
else {
deque records;
for (size_t i = 0; i < q; ++i) {
cin >> action;
if (action == '1') {
cin >> big >> lesser;
if (records.empty()) {
set tmp{ big, lesser };
records.push_back(tmp);
}
else {
auto flag = true;
for (auto& record : records) {
if (*record.begin() == big) {
record.erase(record.begin());
}
if (*record.begin() == lesser) {
record.insert(big);
flag = !flag;
}
}
if (flag) {
set tmp{ big, lesser };
records.push_back(tmp);
}
}
}
else if (action == '2') {
cin >> lesser;
for (const auto& record : records) {
if (record.contains(lesser)) {
result.push_back(*record.begin());
break;
}
}
}
}
}
for (const auto& x : result) {
cout
Для решения этой задачи мы можем использовать структуру данных, такую как стек. Стек позволит нам отслеживать текущее местоположение каждой коробки и ответить на вопросы Шерлока.
for (int i = 1; i <= n; ++i) {
boxes.push(i);
}
for (int i = 0; i < q; ++i) {
int action, x, y;
cin >> action;
if (action == 1) { // Перекладывание коробки
cin >> x >> y;
covering[x] = y;
} else { // Вопрос Холмса
cin >> x;
while (covering.find(x) != covering.end()) {
x = covering[x]; // Находим верхнюю коробку
}
cout << x << endl;
}
}
return 0;
}
```
Этот код сначала создает стек с коробками, затем обрабатывает каждое действие (перекладывание коробок или вопрос Холмса). При перекладывании коробок мы обновляем информацию о том, какая коробка накрывает другую, а при вопросе Холмса мы находим верхнюю коробку и выводим ее номер.
Обратите внимание, что этот код предполагает, что входные данные корректны, и не включает проверку на ошибки ввода.