結果
問題 |
No.3126 Dual Query Problem
|
ユーザー |
|
提出日時 | 2025-04-25 22:11:32 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 392 ms / 2,000 ms |
コード長 | 1,210 bytes |
コンパイル時間 | 3,500 ms |
コンパイル使用メモリ | 283,580 KB |
実行使用メモリ | 8,576 KB |
最終ジャッジ日時 | 2025-06-20 02:45:36 |
合計ジャッジ時間 | 16,320 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 33 |
ソースコード
#include <bits/stdc++.h> #include <stdio.h> using namespace std; long long int LMINF = -1e18; long long int modint = 1000000007; int main() { int row = 0; int n,q; cin >> n >> q; vector<int> X(n); set<int> S; for(int i = 0; i < n; i++){ cin >> X[i]; S.insert(X[i]); } if(q < (int)S.size()+n){ cout << "No"; return 0; } else { cout << "Yes" << endl; } vector<int> A; int v; while(!S.empty()){ v = *begin(S); A.push_back(v); cout << 1 << " " << (int)A.size() << " " << v << endl; row++; S.erase(v); } int minidx,maxidx; int search; for(int i = 0; i < n; i++){ minidx = 0; maxidx = (int)A.size()-1; while(true){ search = (minidx+maxidx)/2; if(A[search] < X[i]){ minidx = search+1; } else if(A[search] > X[i]){ maxidx = search; } else { cout << 2 << " " << search+1 << endl; row++; break; } } } while(row < q){ cout << 1 << " " << 1 << " " << 1 << endl; row++; } }