Для решения этой задачи мы можем использовать структуру данных, такую как стек. Стек позволит нам отслеживать текущее местоположение каждой коробки и ответить на вопросы Шерлока.
Вот C++ код, который решает эту задачу:
```cpp
#include <iostream>
#include <stack>
#include <unordered_map>
using namespace std;
int main() {
int n, q;
cin >> n >> q;
stack<int> boxes;
unordered_map<int, int> covering; // Хранит, какая коробка накрывает другую
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;
}
```
Этот код сначала создает стек с коробками, затем обрабатывает каждое действие (перекладывание коробок или вопрос Холмса). При перекладывании коробок мы обновляем информацию о том, какая коробка накрывает другую, а при вопросе Холмса мы находим верхнюю коробку и выводим ее номер.
Обратите внимание, что этот код предполагает, что входные данные корректны, и не включает проверку на ошибки ввода.