結果
問題 | No.2220 Range Insert & Point Mex |
ユーザー |
![]() |
提出日時 | 2023-03-04 13:51:10 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 239 ms / 2,000 ms |
コード長 | 1,256 bytes |
コンパイル時間 | 1,052 ms |
コンパイル使用メモリ | 91,492 KB |
最終ジャッジ日時 | 2025-02-11 05:14:25 |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 36 |
ソースコード
#include <iostream> #include <vector> #include <algorithm> #include <set> #include <utility> int main() { int n; std::cin >> n; std::vector<std::pair<int, int>> query; query.reserve(2 * n); for (int i = 0; i < n; i++) { int l, r, a; std::cin >> l >> r >> a; l--; query.emplace_back(l, a); query.emplace_back(r, ~a); } int q; int inf = 1e9 + 1; std::cin >> q; query.reserve(2 * n + q); for (int i = 0; i < q; i++) { int x; std::cin >> x; x--; query.emplace_back(x, inf); } std::sort(query.begin(), query.end()); std::set<int> mex; for (int i = 0; i <= n; i++) { mex.insert(i); } std::vector<int> count(n + 1); for (auto [x, y]: query) { if (y == inf) { std::cout << *mex.begin() << '\n'; } else if (y >= 0) { if (y < n) { count[y]++; if (count[y] == 1) { mex.erase(y); } } } else { y = ~y; if (y < n) { count[y]--; if (count[y] == 0) { mex.insert(y); } } } } }