結果
| 問題 | No.2220 Range Insert & Point Mex |
| コンテスト | |
| ユーザー |
nono00
|
| 提出日時 | 2023-03-04 13:51:10 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.89.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);
}
}
}
}
}
nono00