100
#LS1039. 【入门】多个priority_queue【入门】多个priority_queue
题目描述
给你 个数组,分别是 ,初始都为空,现在有如下 3 中操作
- 0 t x, 表示将 添加到
- 1 t,表示如果 不为空,则输出 中的最大的元素;否则什么也不做
- 2 t,表示如果 不为空,则删除 中的最大的元素;否则什么也不做
注意:
priority_queue默认把 最大的元素 放在top()- 如果我们想让
top()返回最小的元素,可以 在插入元素的时候加个负号
输入格式
第 1 行包含 2 个整数正 ,表示数组的个数和操作的个数
接下来 行,每行的第 1 个数是操作的类型
- 当 时,再输入 2 个数 ,表示将 添加到
- 当 时,再输入 1 个数 ,表示如果 不为空,则输出 中的最大的元素;否则什么也不做
- 当 时,再输入 1 个数 ,表示如果 不为空,则删除 中的最大的元素;否则什么也不做
输出格式
- 每当 时,如果 不为空,输出 中最大的数
2 10
0 0 3
0 0 9
0 0 1
1 0
2 0
1 0
0 0 4
1 0
0 1 8
1 1
9
3
4
8
提示
// 申明 n 个 priority_queue
vector<priority_queue<int>> a(n);
for (int i = 0; i < q; i++) {
cin >> t >> x;
// 使用 push() 将 x 添加到 a[t]
a[t].push(x);
}
// 使用 empty() 判断 a[t] 是否为空
if (!a[t].empty()) {
// 使用 top() 获取最大值
cout << a[t].top() << '\n';
}
// 使用 empty() 判断 a[t] 是否为空
if (!a[t].empty()) {
// 使用 pop() 删除最大值
a[t].pop();
}
数据规模与限制
- 1s, 1024KiB for each test case.