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;
}
相关推荐
坚持就完事了16 小时前
蓝桥杯中Python常用的库与模块
python·算法
立志成为大牛的小牛16 小时前
数据结构——四十四、平衡二叉树的删除操作(王道408)
数据结构·学习·程序人生·考研·算法
C语言小火车16 小时前
C/C++ 指针全面解析:从基础到进阶的终极指南
c语言·开发语言·c++·指针
Suckerbin16 小时前
一次LeeCode刷题记录:接雨水
算法
Blossom.11816 小时前
RLHF的“炼狱“突围:从PPO到DPO的工业级对齐实战
大数据·人工智能·分布式·python·算法·机器学习·边缘计算
wefg116 小时前
【C++】特殊类设计
开发语言·c++
帅中的小灰灰16 小时前
C++编程原型设计模式
开发语言·c++
凌康ACG17 小时前
Sciter窗口间状态事件交互(四)
c++·sciter
“αβ”17 小时前
MySQL库的操作
linux·服务器·网络·数据库·c++·mysql·oracle
MobotStone18 小时前
从问答到决策:Agentic AI如何重新定义AI智能体的未来
人工智能·算法