Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

新年联欢会上,G.Sha负责组织智力问答节目。G.Sha建立了一个很大很大的超级题库,并衡量了每道题的难度wi。由于不可以让选手

一上场就被绝顶难题撂倒,所以难度必须循序渐进,从简到繁。

G.Sha制定了一套具体的抽题规则。首先,每位选手的第1道题一定是当前题库中最简单的。每位选手的下一道题,一定是题库中(1

)比刚刚答过的题严格地更难,(2)难度尽可能低的题。当然,每道题使用一遍就从题库中删掉。(可以参考样例数据)

G.Sha刚开完联欢会很累,所以他提供了抽题程序的日志,希望你能重现答题的过程。

简单起见,你只需要依次输出每位选手都答了哪些难度的题就可以了。

【数据规模】

40%的数据中,m≤50, n≤1000。

100%的数据中,m≤1000, n≤100000。

测试数据保证 ,即比赛中使用的题目,不仅比题库少,并且是远远的少。

测试数据保证每位选手都不会出现无题可选的情况。

【提示】

本题数据严格而全面,请注意优化算法,谨防超时。

【输入格式】

输入文件 quiz.in 包含3 行。

第 1 行,整数 n, m。代表题库最初的题目数 n,和选手数 m。

第 2 行,n个整数 wi,代表题目的难度,无序,0≤wi≤100000。

第 3 行,m个整数 ai,代表依次每位选手作答的题目数量。

【输出格式】

输出文件quiz.out包含n行。

第i行,每行ai个整数,代表选手i回答的每道题目的难度。

选手和每位选手的题目均按比赛时间的推移有序。

说明:游戏开始前的题库是{30, 1, 7, 3, 1, 14, 8, 20, 2, 1, 999, 2}。

选手1,依次作答了1,2,3,7四道题。作答后题库剩余{30,1,14,8,20,1,999,2}。

选手2,依次作答了1, 2两道题。作答后题库剩余{30, 14, 8, 20, 1, 999}。

选手3,依次作答了1, 8, 14三道题。作答后题库剩余{30, 20, 999}。

选手4,依次作答了20一道题,作答后题库剩余{30, 999}。

可以注意到,选手1~3都答了难度为1的题。这是因为难度1的题有3道,而对于每位选手来说难度都是递增的,一位选手不可能连续答

同样难度的题。

同理,选手1~2都答了难度为2的题。

Sample Input

12 4

30 1 7 3 1 14 8 20 2 1 999 2

4 2 3 1

Sample Output

1 2 3 7

1 2

1 8 14

20

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t056

【题解】



把n个问题加入multiset题库->int类型里面就好;

每个选手按照要求用upper_bound找比上一次大的数字就好;

简直是模板题有木有。

输出有点坑;每行最后一个数字后面有空格;



【完整代码】

#include <cstdio>
#include <cmath>
#include <set>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%I64d",&x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int MAXM = 1000+100; multiset <int> tiku; int n,m;
int a[MAXM]; int main()
{
//freopen("F:\\rush.txt","r",stdin);
rei(n);rei(m);
rep1(i,1,n)
{
int x;
rei(x);
tiku.insert(x);
}
rep1(i,1,m)
rei(a[i]);
rep1(i,1,m)
{
int now = -1;
rep1(j,1,a[i])
{
__typeof(tiku.begin()) t = tiku.upper_bound(now);
now = (*t);
printf("%d ",now);
tiku.erase(t);
}
puts("");
}
return 0;
}

最新文章

  1. 【HDU 5733】tetrahedron
  2. perl常用代码
  3. .Net使用CDO发送邮件,需安装注册的组件
  4. Linux C SMTP POP3 极简陋邮件客户端
  5. error “base class has incomplete type”
  6. Amoeba实现mysql主从读写分离
  7. 使用 Java 配置进行 Spring bean 管理--转
  8. clistctrl 虚拟列表
  9. Linux多线程服务端编程:使用muduo C++网络库
  10. 关于微软公有云Azure会计标准
  11. activemq的案例
  12. sublime text3汉化
  13. 基于CBOW网络手动实现面向中文语料的word2vec
  14. Expo大作战(二十四)--expo sdk api之Accelerometer
  15. 如何在Linux系统中安装VMware
  16. Tomcat------如何配置域名和80端口
  17. (转)C语言中scanf函数与空格回车
  18. C# 终极基类Object介绍
  19. Hive学习之路 (二)Hive安装
  20. 如何设置电脑的固定IP地址

热门文章

  1. 模板内置函数(HTML)
  2. bzoj1800 飞行棋
  3. Linux配置redis开机启动(CentOS 7)
  4. 洛谷 P3768 简单的数学题 (莫比乌斯反演)
  5. Inventor安装失败怎样卸载重新安装Inventor,解决Inventor安装失败的方法总结
  6. 如何用django框架完整的写一个项目
  7. POLARDB v2.0 技术解读
  8. LeetCode74 Search a 2D Matrix
  9. vs code python保存时pylint提示&quot;Unable to import &#39;flask&#39;&quot;
  10. @codechef - MXMN@ Maximum and Minimum