Pagini recente » Cod sursa (job #1762568) | Rating Alexandru Ion (Ion.A) | Cod sursa (job #693792) | Cod sursa (job #1030764) | Cod sursa (job #2079883)
#include <bits/stdc++.h>
using namespace std;
void solve() {
size_t size;
cin >> size;
vector< tuple<int, int, int> > instructions(1);
for (size_t i = 1; i <= size; ++i) {
int a, b, c;
cin >> a >> b >> c;
instructions.push_back(make_tuple(a, b, c));
}
vector< int > vec(size + 1);
auto place_value = [&](int value, int position) {
int curr_pos = 0;
while (position) {
++curr_pos;
if (vec[curr_pos] == 0)
--position;
}
vec[curr_pos] = value;
};
int current = (int)size, recursion_levels = 1;
while (current > 1) {
++recursion_levels;
int a, b, c;
tie(a, b, c) = instructions[current];
if (a == b || a == c)
place_value(current, a);
else if (b == c)
place_value(current, b);
else {
place_value(current, max(a, b));
place_value(current - 1, min(a, b));
--current;
}
--current;
}
if (current == 1)
place_value(1, 1);
cout << recursion_levels << endl;
for (int i = 1; i <= (int)size; ++i)
cout << vec[i] << ' ';
cout << endl;
}
int main() {
assert(freopen("sortare.in", "r", stdin));
assert(freopen("sortare.out", "w", stdout));
cin.tie(nullptr);
ios_base::sync_with_stdio(false);
solve();
return 0;
}