MZL‘s simple problem
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 367 Accepted Submission(s): 170
Problem Description
A simple problem
Problem Description
You have a multiple set,and now there are three kinds of operations:
1 x : add number x to set
2 : delete the minimum number (if the set is empty now,then ignore it)
3 : query the maximum number (if the set is empty now,the answer is 0)
Input
The first line contains a number
N
(N≤106),representing
the number of operations.
Next N
line ,each line contains one or two numbers,describe one operation.
The number in this set is not greater than 109.
Output
For each operation 3,output a line representing the answer.
Sample Input
6 1 2 1 3 3 1 3 1 4 3
Sample Output
3 4
Source
2015 Multi-University Training Contest 5
开个map就好了。
#include <iostream> #include <algorithm> #include <stdio.h> #include <string.h> #include <math.h> #include <map> #define M 100010 using namespace std; map<__int64, __int64>mp; std::map<__int64, __int64>::iterator it; int main() { __int64 n; while (scanf("%I64d", &n) != EOF) { __int64 op, a; mp.clear(); for (int i = 0; i < n; i++) { scanf("%I64d", &op); if (op == 1) { scanf("%I64d", &a); mp[a]++; } else if (op == 2) { if (mp.size() == 0) continue; it = mp.begin(); int t = it->first; mp[t]--; if (mp[t] == 0) mp.erase(it); } else { if (mp.size() == 0) printf("0\n"); else { it = mp.end(); it--; printf("%I64d\n", it->first); } } } } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。