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;
}
相关推荐
炽烈小老头3 分钟前
【每天学习一点算法 2026/05/20】省份数量
学习·算法
乐迪信息4 分钟前
乐迪信息:港口夜间船舶巡查难,AI摄像机法全天候监测
人工智能·物联网·算法·计算机视觉·目标跟踪
sali-tec5 分钟前
C# 基于OpenCv的视觉工作流-章74-线-线距离
图像处理·人工智能·opencv·算法·计算机视觉
CryptoPP6 分钟前
快速集成:基于现代API的金融数据流解决方案
大数据·数据结构·笔记·金融·区块链
YL200404268 分钟前
054实现Trie(前缀树)
数据结构·leetcode
故事和你919 分钟前
洛谷-【图论2-3】最小生成树1
开发语言·数据结构·c++·算法·动态规划·图论
故事和你9111 分钟前
洛谷-【图论2-3】最小生成树2
开发语言·数据结构·c++·算法·动态规划·图论
guygg8812 分钟前
贝叶斯非局部均值降噪算法C语言实现
c语言·算法·均值算法
郝学胜-神的一滴13 分钟前
中级OpenGL教程 006:高光反射原理与 Shader 实现
c++·unity·godot·图形渲染·three.js·opengl·unreal
量子炒饭大师13 分钟前
【优化算法】滑动窗口的「义体化」重构 ——【滑动窗口】何为滑动窗口?滑动窗口算法的核心目的是什么?
c++·算法·重构·优化算法·双指针·滑动窗口