Skip to content

14044: 【原4044】STL系列-map/pq

题目

题目描述

author: Engineev 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/4044

Description

面包是一个友善的助教,为了同学们和助教们的身心健康,所以出了这一套C++ STL使用系列,旨在帮助大家熟悉STL的一些操作。

日天学长有很多很多个苹果,并且他常常去一餐旁边的水果店里买苹果,他把它们一堆堆地堆在了寝室里,他希望知道每一堆苹果一里面最大的苹果有多大。你需要处理\(n\)个操作。

  1. 日天学长去买了一个大小为\(y\)的苹果,并把放到了第\(x\)堆苹果中。
  2. 日天学长吃掉了第\(x\)堆苹果中最大的那个苹果。(确保那一堆有苹果)
  3. 日天学长问你第\(x\)堆苹果中最大的那一个有多大。

假设日天学长一开始没有苹果.

Input Format

第一行为\(n\) 接下来的\(n\)行为操作,每个操作格式如下, 第一个数\(t\)表示操作编号,对于各个操作之后是

  1. 第\(x\)堆和日天买的新苹果的大小\(y\)
  2. 第\(x\)堆
  3. 第\(x\)堆

Output Format

对于每一个操作3,输出对应的答案。

Sample Input

10
1 205994652 166436591
3 205994652
1 205994652 442744844
2 205994652
1 802512269 688107128
1 46206654 191520151
3 205994652
2 205994652
1 802512269 487115216
3 802512269

Sample Output

166436591
166436591
688107128

数据范围

对于100%的数据,确保\(x\)和\(y\)都在整型范围内。\(n \le 50000\)

FineArtz's solution

/* STL-map/pq */
#include <iostream>
#include <cstdio>
#include <map>
#include <queue>
using namespace std;

int main(){
    int n, t, x, y;
    scanf("%d", &n);
    //cin >> n;
    map<int, priority_queue<int>> apple;
    while (n--){
        scanf("%d", &t);
        //cin >> t;
        switch(t){
            case 1:
                scanf("%d%d", &x, &y);
                //cin >> x >> y;
                apple[x].push(y);
                break;
            case 2:
                scanf("%d", &x);
                //cin >> x;
                apple[x].pop();
                break;
            case 3:
                scanf("%d", &x);
                //cin >> x;
                printf("%d\n", apple[x].top());
                //cout << apple[x].top() << endl;
                break;
            default:
                break;
        }
    }
    return 0;
}