其他分享
首页 > 其他分享> > Atcoder 212D Querying Multiset

Atcoder 212D Querying Multiset

作者:互联网

Problem Statement

Takahashi has many balls, on which nothing is written, and one bag. Initially, the bag is empty. Takahashi will do Q operations, each of which is of one of the following three types.

For each 1≤i≤Q, you are given the type Pi of the i-th operation and the value of Xi if the operation is of Type 1 or 2. Print the integers recorded in the operations of Type 3 in order.

Constraints


Input

Input is given from Standard Input in the following format:

Q
query1
query2
::
queryQ

Each queryi in the 2-nd through (Q+1)-th lines is in the following format:

1 Xi
2 Xi
3

The first number in each line is 1≤Pi≤3, representing the type of the operation. If Pi=1 or Pi=2, it is followed by a space, and then by Xi.

Output

For each operation with Pi=3 among the Q operations, print the recorded integer in its own line.


Sample Input 1 Copy

5
1 3
1 5
3
2 2
3

Sample Output 1 Copy

3
7

Takahashi will do the following operations.

Therefore, we should print 3 and 7, in the order they are recorded.


Sample Input 2 Copy

6
1 1000000000
2 1000000000
2 1000000000
2 1000000000
2 1000000000
3

Sample Output 2 Copy

5000000000

Note that the outputs may not fit into a 32-bit integer.

题目翻译

3种操作。操作1:将一个数字\(X_i\)写入。操作2:所有数字加上\(X_i\)。操作3:读取并删除最小的数字

\(Q<=2*10^5,X_i<=10^9\)

题目解析

要点在于如何快速维护所有当前数字\(+X_i\)

考虑对数字的增加进行全局维护,维护全局的相加和\(nowsum\),最后读取时加上\(nowsum\)表示操作2的影响

当插入一个数字时,则减去当前的\(nowsum\),即抵消掉之前的操作2的影响

每次将\(x_i-nowsum\)插入有限队列,读取时\(+nowsum\)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
priority_queue<ll,vector<ll>,greater<ll> >q;
ll nowsum=0;
int main(){
    int Q,opt,x;
    cin>>Q;
    while (Q--){
        scanf("%d",&opt);
        if (opt==1){
            scanf("%d",&x);
            q.push(x-nowsum);
        }else if (opt==2){
            scanf("%d",&x);
            nowsum+=x;
        }else{
            printf("%lld\n",q.top()+nowsum);
            q.pop();
        }
    }
}

标签:Atcoder,ball,Querying,nowsum,bag,Xi,212D,integer,Pi
来源: https://www.cnblogs.com/Y-E-T-I/p/15135234.html