結果
問題 |
No.3126 Dual Query Problem
|
ユーザー |
|
提出日時 | 2025-04-25 21:55:07 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 59 ms / 2,000 ms |
コード長 | 1,566 bytes |
コンパイル時間 | 1,349 ms |
コンパイル使用メモリ | 116,008 KB |
実行使用メモリ | 22,564 KB |
最終ジャッジ日時 | 2025-06-20 02:44:12 |
合計ジャッジ時間 | 9,460 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 33 |
ソースコード
#include <iostream> #include <cstdint> #include <vector> #include <algorithm> using namespace std; static inline constexpr vector<uint32_t> prepare(const uint32_t N, vector<uint32_t>& X) { vector<uint32_t> distribution(X); sort(distribution.begin(), distribution.end()); distribution.erase(unique(distribution.begin(), distribution.end()), distribution.end()); for (uint32_t i = 0; i != N; ++i) X[i] = lower_bound(distribution.begin(), distribution.end(), X[i]) - distribution.begin(); return distribution; } static inline constexpr vector<string> solve(const uint32_t N, const uint32_t Q, const vector<uint32_t>& X, const vector<uint32_t>& distribution) { vector<string> ans; vector<bool> is_appeared(N, false); ans.reserve(Q + 1); ans.emplace_back("Yes"s); uint32_t additional = 0; for (uint32_t i = 0; i != N; ++i) { if (!is_appeared[X[i]]) { ++additional, ans.emplace_back("1 "s + to_string(distribution[X[i]]) + " "s + to_string(distribution[X[i]])); is_appeared[X[i]] = true; } ans.emplace_back("2 "s + to_string(distribution[X[i]])); } if (N + additional > Q) ans.clear(), ans.emplace_back("No"s); else while (ans.size() <= Q) ans.emplace_back("1 1 1"s); return ans; } static inline void output(const vector<string>& ans) { for (uint32_t i = 0; i != ans.size(); ++i) cout << ans[i] << '\n'; } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); uint32_t N, Q, i; cin >> N >> Q; vector<uint32_t> X(N); for (i = 0; i != N; ++i) cin >> X[i]; output(solve(N, Q, X, prepare(N, X))); return 0; }