AT_abc212_d [ABC212D] Querying Multiset

链接:AT_abc212_d [ABC212D] Querying Multiset - 洛谷

题目描述

高橋君は何も書かれていないたくさんのボールと 1 つの袋を持っています。 最初、袋は空で、高橋君は Q 回の操作を行います。 それぞれの操作は以下の 3 種類のうちのいずれかです。

  • 操作 1 : まだ何も書かれていないボール 1 つに整数 Xi を書き込み、袋に入れる。
  • 操作 2 : 袋に入っているすべてのボールについて、そこに書かれている数を、それに Xi を加えたものに書き換える。
  • 操作 3 : 袋に入っているボールのうち書かれている数が最小のもの(複数ある場合はそのうちの 1 つ)を取り出し、そこに書かれている数を記録する。その後、そのボールを捨てる。

1≤ i≤ Q について i 回目の操作の種類 Pi​ および操作 1 , 2 における Xi​ の値が与えられるので、操作 3 において記録された数を順に出力してください。

输入格式

入力は以下の形式で標準入力から与えられる。

Q query1​ query2​ : queryQ​

2 行目から Q+1 行目の各 queryi​ は次のいずれかの形で与えられる。

1 Xi​
2 Xi​
3

まず、1≤ Pi​≤ 3 が与えられる。これは操作の種類を表す。 Pi​=1 または Pi​=2 ならば、その後に空白区切りで Xi​ が与えられる。

输出格式

Q 回の操作のうち操作の種類が Pi​=3 であるような各操作について、記録された数を改行区切りで出力せよ。

隐藏翻译

题意翻译

给定一个集合和 Q 次操作,每个操作可能是以下操作之一:

  • 第一个操作给定整数 x,表示将 x 放入集合。

  • 第二个操作给定整数 x,表示将集合的数分别加上 x。

  • 第三个操作将集合最小的数删除。

对于每个第三个操作,输出你删去的数。

保证 1≤Q≤2×105,操作种类 op∈{1,2,3},1≤x≤109。

输入输出样例

输入 #1复制运行

复制代码
5
1 3
1 5
3
2 2
3

输出 #1复制运行

复制代码
3
7

输入 #2复制运行

复制代码
6
1 1000000000
2 1000000000
2 1000000000
2 1000000000
2 1000000000
3

输出 #2复制运行

复制代码
5000000000

说明/提示

制約

  • 1 ≤ Q ≤ 2× 105
  • 1 ≤ Pi ≤ 3
  • 1 ≤ Xi ≤ 109
  • 入力は全て整数である。
  • Pi=3 であるような i が 1 つ以上存在する。
  • Pi=3 であるとき、 i 回目の操作の直前の時点で、袋には 1 つ以上のボールが入っている。

Sample Explanation 1

高橋君は次のように操作を行います。 - 3 の書かれたボールを袋に入れる。 - 5 の書かれたボールを袋に入れる。 - 今、袋には 3 の書かれたボールと 5 の書かれたボールが入っているため、このうち小さい 3 の書かれたボールを取り出し、 3 を記録した後に捨てる。 - 今、袋には 5 の書かれたボールのみが入っているため、この数を 5+2=7 に書き換える。 - 今、袋には 7 の書かれたボールのみが入っているため、このボールを取り出し、 7 を記録した後に捨てる。 よって、記録された順に 3 , 7 を出力します。

Sample Explanation 2

答えが 32 bit整数に収まらないことがある事に注意してください。

C++代码如下:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;
    priority_queue<int,vector<int>,greater<int>> q;
    long long sum=0;
    for(int i=0;i<n;i++){
        int a;
        cin>>a;
        if(a==1){
            int b;
            cin>>b;
            q.push(b-sum);
        }
        if(a==2){
            int c;
            cin>>c;
            sum+=c;
        }
        if(a==3){
            cout<<q.top()+sum<<endl;
            q.pop();
        }
    }
    return 0;
}
相关推荐
Trouvaille ~20 小时前
【Linux】UDP Socket编程实战(一):Echo Server从零到一
linux·运维·服务器·网络·c++·websocket·udp
HellowAmy20 小时前
我的C++规范 - 线程池
开发语言·c++·代码规范
czy878747520 小时前
const 在 C/C++ 中的全面用法(C/C++ 差异+核心场景+实战示例)
c语言·开发语言·c++
十五年专注C++开发20 小时前
MinHook:Windows 平台下轻量级、高性能的钩子库
c++·windows·钩子技术·minhook
咖丨喱20 小时前
IP校验和算法解析与实现
网络·tcp/ip·算法
罗湖老棍子20 小时前
括号配对(信息学奥赛一本通- P1572)
算法·动态规划·区间dp·字符串匹配·区间动态规划
fengfuyao98521 小时前
基于MATLAB的表面织构油润滑轴承故障频率提取(改进VMD算法)
人工智能·算法·matlab
机器学习之心21 小时前
基于随机森林模型的轴承剩余寿命预测MATLAB实现!
算法·随机森林·matlab
一只小小的芙厨21 小时前
寒假集训笔记·树上背包
c++·笔记·算法·动态规划
庄周迷蝴蝶21 小时前
四、CUDA排序算法实现
算法·排序算法