https://agc012.contest.atcoder.jp/tasks/agc012_c
12345...12345...みたいに並べて2^n関連でやることは見えたけどそこからが思いつかなかった。
要素入れ替えたりを考えたけど、想定解は挿入でした。
やっぱり秩序なくやるよりも、定式化できそうな良い構造に沿ってやるのが良さそうですね。
ll N; void solve() { cin >> N; ll a = 0, n = 1; while(n * 2 <= N + 1) { a++; n *= 2; } vector<int> ans; ll cn = N + 1 - n; rep(i, 0, a) { if(cn & (1LL << i)) { cn -= (1LL << i); ans.pb(99 - i); } ans.pb(i); } rep(i, 0, 100) ans.pb(i); cout << sz(ans) << "\n"; rep(i, 0, sz(ans)) { cout << ans[i] + 1 << " "; } cout << "\n"; }