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)
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 .
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
开个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;
}