目录

AtCoder D 212

AtCoder

Leon | 03 Aug 2021

题目描述

Takahashi有很多球,然后他可以做三种操做:

  1. 它可以将一个球,写上一个数字xi并放进包里。
  2. 将每一个包里的数字加上数字Xi。
  3. 拿出包里面最小的数的球

题目思路

利用priority queue的特性,将数据存进queue里面。并将所有的2的操作加起来的数储存起来,模拟将所有的数相加的过程。

复杂度分析:

priority queue的操作(基于小根堆实现) \(O(\log n)\)

遍历操作: \(O(n)\) 因为优先队列的操作实在遍历的情况下做的,所以两个复杂度相乘得到整体复杂度: \(O(n\log n)\)

代码实现

//qw.java
import java.util.*;
public class qw{
    public static void main (String [] args){
        Scanner in = new Scanner(System.in);
        PriorityQueue <Long> queue = new PriorityQueue<Long>();
        int n = in.nextInt();
        long accumulate = 0L;
        while(n-->0){
            int type = in.nextInt();
            if(type==1){
                queue.add(in.nextLong()-accumulate);
            }else if(type==2){
                accumulate+=in.nextLong();
            }else{
                System.out.println(queue.poll()+accumulate);
            }
        }
    }
}

评论区