結果
問題 |
No.3184 Make Same
|
ユーザー |
|
提出日時 | 2025-06-26 17:20:57 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 48 ms / 2,000 ms |
コード長 | 1,220 bytes |
コンパイル時間 | 1,308 ms |
コンパイル使用メモリ | 110,352 KB |
実行使用メモリ | 7,848 KB |
最終ジャッジ日時 | 2025-06-26 17:21:08 |
合計ジャッジ時間 | 10,246 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 24 |
ソースコード
#include <iostream> #include <cstdint> #include <array> #include <vector> #include <algorithm> using namespace std; static inline constexpr vector<array<uint32_t, 3>> solve(const uint32_t N, vector<uint32_t>& A) noexcept { vector<array<uint32_t, 3>> ans; ans.reserve(30); uint32_t border_value = 0; for (uint32_t i = 29; i != UINT32_MAX; --i) { const uint32_t border_index = lower_bound(A.begin(), A.end(), border_value + (UINT32_C(1) << i)) - A.begin(); if (border_index == N) continue; border_value |= (UINT32_C(1) << i); if (border_index == 0) continue; ans.push_back(array<uint32_t, 3>{ 1, border_index, UINT32_C(1) << i }); for (uint32_t j = 0; j != border_index; ++j) A[j] |= (UINT32_C(1) << i); inplace_merge(A.begin(), A.begin() + border_index, A.end()); } return ans; } static inline void output(const vector<array<uint32_t, 3>>& ans) noexcept { cout << ans.size() << '\n'; for (uint32_t i = 0; i != ans.size(); ++i) cout << ans[i][0] << ' ' << ans[i][1] << ' ' << ans[i][2] << '\n'; } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); uint32_t N, i; cin >> N; vector<uint32_t> A(N); for (i = 0; i != N; ++i) cin >> A[i]; output(solve(N, A)); return 0; }