Problem Description
There are n soda
conveniently labeled by 1,2,…,n.
beta, their best friends, wants to invite some soda to go hiking. The i-th
soda will go hiking if the total number of soda that go hiking except him is no less than li and
no larger than ri.
beta will follow the rules below to invite soda one by one:

1. he selects a soda not invited before;

2. he tells soda the number of soda who agree to go hiking by now;

3. soda will agree or disagree according to the number he hears.

Note: beta will always tell the truth and soda will agree if and only if the number he hears is no less than li and
no larger than ri,
otherwise he will disagree. Once soda agrees to go hiking he will not regret even if the final total number fails to meet some soda's will.

Help beta design an invitation order that the number of soda who agree to go hiking is maximum.
 

Input
There are multiple test cases. The first line of input contains an integer T,
indicating the number of test cases. For each test case:

The first contains an integer n (1≤n≤105),
the number of soda. The second line constains n integers l1,l2,…,ln.
The third line constains n integers r1,r2,…,rn. (0≤li≤ri≤n)

It is guaranteed that the total number of soda in the input doesn't exceed 1000000. The number of test cases in the input doesn't exceed 600.
 

Output
For each test case, output the maximum number of soda. Then in the second line output a permutation of 1,2,…,n denoting
the invitation order. If there are multiple solutions, print any of them.
 

Sample Input

4
8
4 1 3 2 2 1 0 3
5 3 6 4 2 1 7 6
8
3 3 2 0 5 0 3 6
4 5 2 7 7 6 7 6
8
2 2 3 3 3 0 0 2
7 4 3 6 3 2 2 5
8
5 6 5 3 3 1 2 4
6 7 7 6 5 4 3 5
 

Sample Output

7
1 7 6 5 2 4 3 8
8
4 6 3 1 2 5 8 7
7
3 6 7 1 5 2 8 4
0
1 2 3 4 5 6 7 8

这题可以用集合做,也可以用优先队列做,方法差不多,可以把所有的元素用线段表示,然后从0开始每次找左边界l[i]小于等于当前集合人数的元素,然后把它放进集合(或优先队列)中,然后删掉右边界r[i]不符合条件的元素(即右边界小于当前元素,这里不用考虑左边界了,因为在集合中的元素一定是l[i]<=tot才放进来的,只要考虑右边界就行了)。

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
#define maxn 100060
struct node{
int l,r,idx;
}a[maxn],temp;
int vis[maxn],c[maxn]; bool operator <(node a,node b){
return a.r>b.r;
}
priority_queue<node> q; bool cmp(node a,node b){
if(a.l==b.l)return a.r<b.r;
return a.l<b.l;
} int main()
{
int n,m,i,j,T,tot,num1;
scanf("%d",&T);
while(T--)
{
while(!q.empty())q.pop();
memset(vis,0,sizeof(vis));
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&a[i].l);
a[i].idx=i;
}
for(i=1;i<=n;i++){
scanf("%d",&a[i].r);
}
sort(a+1,a+n+1,cmp);
if(a[1].l!=0){
printf("0\n");
for(i=1;i<=n;i++){
if(i==n)printf("%d\n",i);
else printf("%d ",i);
}
continue;
}
tot=0;num1=1;
while(1)
{
while(a[num1].l<=tot && num1<=n){
q.push(a[num1]);num1++;
}
while(!q.empty()){
temp=q.top();
if(temp.r<tot){
q.pop();
}
else break;
}
if(q.empty())break;
temp=q.top();
tot++;c[tot]=temp.idx;vis[temp.idx]=1;
q.pop();
}
printf("%d\n",tot);
for(i=1;i<=n;i++){
if(vis[i])continue;
c[++tot]=i;
}
for(i=1;i<=tot;i++){
if(i==tot)printf("%d\n",c[tot]);
else printf("%d ",c[i]);
}
}
return 0;
}

hdu5360 Hiking的更多相关文章

  1. hdu5360 Hiking(水题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Hiking Time Limit: 6000/3000 MS (Java/Oth ...

  2. XidianOJ 1172 Hiking

    题目描述 BlacKin and GKCY are going hiking together. Besides their personal items, there are some items ...

  3. Hiking 分类: 比赛 HDU 函数 2015-08-09 21:24 3人阅读 评论(0) 收藏

    Hiking Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Subm ...

  4. hdu 2425 Hiking Trip

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2425 Hiking Trip Description Hiking in the mountains ...

  5. HDU 5360 Hiking 登山 (优先队列,排序)

    题意: 有n个人可供邀请去hiking,但是他们很有个性,每个人都有个预期的人数上下限[Li,Ri],只有当前确定会去的人数在这个区间内他才肯去.一旦他答应了,无论人数怎样变更,他都不会反悔.问最多能 ...

  6. Gym 100531H Problem H. Hiking in the Hills 二分

    Problem H. Hiking in the Hills 题目连接: http://codeforces.com/gym/100531/attachments Description Helen ...

  7. [优先队列]HDOJ5360 Hiking

    题意:有n个人,每个人有两个参数$l$和$r$ 邀请他们去hiking, 当  当前已经邀请到的人数大于等于$l$,并且小于等于$r$,那么这个人就会去 问最多能邀请到几个人 并输出 依次要邀请的人的 ...

  8. Codeforces Round #277.5 (Div. 2) --E. Hiking (01分数规划)

    http://codeforces.com/contest/489/problem/E E. Hiking time limit per test 1 second memory limit per ...

  9. hdu 2425 Hiking Trip (bfs+优先队列)

    Problem Description Hiking in the mountains is seldom an easy task for most people, as it is extreme ...

随机推荐

  1. 关于 percona monitoring plugins插件报slave is stoped on ip地址

    思路:肯定是某个item触发了触发器 去看触发器,找到 slave is stoped,如下图 看到键是mysql.running-slave ,然后去定义key的文件中查看该键对应的脚本,修改脚本. ...

  2. 【ORA】ORA-39002,ORA-39070,ORA-29283, ORA-06512,ORA-29283解决办法

    今天使用IMPDP导入的时候报了一个错误 ORA-39002: invalid operation  ORA-39070: Unable to open the log file.  ORA-2928 ...

  3. C# datagridview设置标题为汉语

    正常情况下,在给datagridview绑定数据源之后,显示的是SQL语句中的栏位,如下 我们想让标题显示汉语,可以有一下两种方法 1.在SQL中设置列别名 SELECT TITLE AS '报警标题 ...

  4. oracle dg库因为standby_file_management参数导致应用停止

    DG库的standby_file_management=manual,主库添加文件的时候,备库无法自动创建对应的文件而报错 File #154 added to control file as 'UN ...

  5. wmic 操作文件的datafile

    wmic datafile /?动词有ASSOC,CALL,CREATE,DELETE,GET,LIST 这几个 命令:wmic datafile where "filename='dsc0 ...

  6. Py装饰器

    装饰器: 1.定义,什么是装饰器 装饰器本质是一个函数,它是为了给其他函数添加附加功能 2.装饰器的两个原则 原则1   不修改被修饰函数的源代码原则2   不修改被修饰函数的调用方式 3.首先来看一 ...

  7. 使用pushplus+python实现亚马逊到货消息推送微信

    xbox series和ps5发售以来,国内黄牛价格一直居高不下.虽然海外amazon上ps5补货很少而且基本撑不过一分钟,但是xbox series系列明显要好抢很多. 日亚.德亚的xbox ser ...

  8. Ajax编程基础

    目录 Ajax编程基础 传统网站中存在的问题 Ajax概述 Ajax的应用场景 Ajax的运行环境 Ajax运行原理及实现 Ajax运行原理 Ajax的实现步骤 1.创建Ajax对象 2.告诉Ajax ...

  9. MySQL进阶:约束,多表设计,多表查询,视图,数据库备份与还原

    MySQL进阶 知识点梳理 一.约束 1. 外键约束 为什么要有外键约束 例如:一个user表,一个orderlist 如果现在想要直接删除id为1的张三,但是orderlist里还有用户id为1的订 ...

  10. openrstry 限流 是否有清零逻辑 连接池

    openrstry  限流  是否有清零逻辑 https://github.com/openresty/lua-resty-limit-traffic # encoding=utf-8 # Shawn ...