导语:今天看IOI2004的论文集,学到了一种集合函数,顺便把它记录下来,一位很牛的学长关于此集合写的很详细,可以参考他的博客链接click here~~
例题:支付帐单:
题目描述约束条件 天数的上限为30,000,每天至少有两张可支付的帐单,保证最后一天全部付清
【输入格式】
第1 行:一个正整数N(N≤30,000),表示总共的天数。
第2 行到第N+1 行:每一行描述一天中收到的帐单。先是一个非负整数M,表示当天
收到的账单数,后跟M 个正整数(都小于1,000,000,000),表示每张帐单的面额。
输入数据保证每天都可以支付两张帐单,并且帐单会在最后一天全部付清。
【输出格式】
输出共N 行,每行两个用空格分隔的整数,分别表示当天支付的面额最小和最大的支
票的面额。
【输入】
4
3 3 6 5
2 8 2
3 7 1 7
0
【输出】
3 6
2 8
1 7
5 7
代码实现:
#include <bits/stdc++.h>
using namespace std;
#include <iterator>
#include <utility>
#include <memory>
#include <algorithm>
#include <functional>
#include <numeric>
int main()
{
int n,m,p;
multiset<int >bills;<span><span></span><span class="comment">//可重复的多元集合</span><span> </span></span>
cin>>n;
while(n--)
{
cin>>m;
while(m--)
{
cin>>p;
bills.insert(p);<span><span class="comment">//插入一次自动排序一次</span><span> </span></span>
}
cout<<*bills.begin()<<" "<<*(--bills.end())<<endl;
bills.erase(bills.begin());
bills.erase(--bills.end());
}
return 0;
}
原文:http://blog.csdn.net/u013050857/article/details/45113381