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

找出能约出最多人的顺序。  假设前面已经有x人同意了,对于第i个人而言, l[i] <= x <= r[i] ,则第i个人同意。求以怎样的顺序去找人最合适。

感觉思路大致方向是对的,只是方法上有些问题,不够简便(- -)

在同l都满足的情况下,选择的r要尽可能的小,才能保证后面选的更多

scanf("%d",&tmp);

q[p[i]].push_back(node(tmp,i));

p[i]是它的左边,tmp是右边,用这样保存的话在查找的时候便不用查找全部。(详细看代码)

每次查找后都保证了(l[i] <= i 的全部被包括了,感觉别人好机智 。。)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std; struct node
{
int b, num;
node() {}
node( int _b, int _num )
{
b = _b, num = _num;
}
bool operator < ( const node & l ) const
{
return b > l.b;
}
};
int p[100010];
int n;
int rec[100010];
int vis[100010];
int aim;
vector<node>q[100010];
priority_queue<node>que; int main()
{
int T;
scanf("%d",&T);
while(T--)
{
aim=0;
memset(vis,0,sizeof(vis));
scanf("%d",&n);
for(int i = 0;i <= n;i++)
q[i].clear(); for(int i=1; i<=n; i++)
{
scanf("%d",&p[i]);
} for(int i=1; i<=n; i++)
{
int tmp;
scanf("%d",&tmp);
q[p[i]].push_back(node(tmp,i)); //用左边界来记录
} while(1)
{
int flag = 0;
for(int i=0; i < q[aim].size(); i++) //这里就不需要全部找一遍
{
que.push(q[aim][i]);
}
while(!que.empty())
{
if(que.top().b>= aim && vis[que.top().num]!=1)
{
vis[que.top().num]=1;
rec[aim] = que.top().num;
aim++;
que.pop();
flag = 1;
break;
}
que.pop();
}
if(!flag)
break;
} printf("%d\n",aim);
if(aim)
{
printf("%d",rec[0]);
for(int i=1; i<aim; i++)
printf(" %d",rec[i]); for(int i=1; i<=n; i++)
{
if(vis[i]==0)
printf(" %d",i);
}
}
else
{
printf("1");
for(int i = 2; i <= n; i++)
printf(" %d",i);
}
printf("\n");
}
return 0;
}

  

2015 多校联赛 ——HDU5360(贪心+优先队列)的更多相关文章

  1. 2015 多校联赛 ——HDU5303(贪心)

    Delicious Apples Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Other ...

  2. 2015 多校联赛 ——HDU5334(构造)

    Virtual Participation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Ot ...

  3. 2015 多校联赛 ——HDU5302(构造)

    Connect the Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  4. 2015 多校联赛 ——HDU5294(最短路,最小切割)

    Tricks Device Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

  5. 2015 多校联赛 ——HDU5325(DFS)

    Crazy Bobo Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Tota ...

  6. 2015 多校联赛 ——HDU5316(线段树)

    Fantasy magicians usually gain their ability through one of three usual methods: possessing it as an ...

  7. 2015 多校联赛 ——HDU5323(搜索)

    Solve this interesting problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  8. 2015 多校联赛 ——HDU5319(模拟)

    Painter Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Su ...

  9. 2015 多校联赛 ——HDU5301(技巧)

    Your current task is to make a ground plan for a residential building located in HZXJHS. So you must ...

随机推荐

  1. 1013团队Beta冲刺day3

    项目进展 李明皇 今天解决的进度 完善了程序的运行逻辑(消息提示框等) 明天安排 前后端联动调试 林翔 今天解决的进度 向微信官方申请登录验证session以维护登录态 明天安排 继续完成维护登录态 ...

  2. 学号:201621123032 《Java程序设计》第3周学习总结

    1:本周学习总结 1. 写出你认为本周学习中比较重要的知识点关键词. 类,对象,封装,继承,方法. 2. 用思维导图或者Onenote或其他工具将这些关键词组织起来 2:书面作业 2.1:以面向对象方 ...

  3. Python 图片转字符画

    Python 图片转字符画 一.课程介绍 1. 课程来源 原创 2. 内容简介 本课程讲述怎样使用 Python 将图片转为字符画 3. 前置课程 Python编程语言 Linux 基础入门(新版) ...

  4. android头像选择(拍照,相册,裁剪)

    组织头像上传时候,不兼容android6.0,并且 imageview.setImageBitmap(BitmapFactory.decodeFile(IMAGE_FILE_LOCATION));// ...

  5. 浅谈 ThreadLocal

    有时,你希望将每个线程数据(如用户ID)与线程关联起来.尽管可以使用局部变量来完成此任务,但只能在本地变量存在时才这样做.也可以使用一个实例属性来保存这些数据,但是这样就必须处理线程同步问题.幸运的是 ...

  6. stringify 字符串转化成json方法

    参照原文:http://www.cnblogs.com/damonlan/ http://www.jb51.net/article/29893.htm stringify的作用主要是序列化对象(转化为 ...

  7. Css之导航栏下拉菜单

    Css: /*下拉菜单学习-2017.12.17 20:17 added by ldb*/ ul{ list-style-type:none; margin:; padding:; overflow: ...

  8. JAVA_SE基础——29.构造函数

    黑马程序员入学Blog... jvm创建Java对象时候需要调用构造器,默认是不带参数的.在构造器中,你可以让jvm帮你初始化一些参数或者执行一系列的动作. 它是对象创建中执行的函数,及第一个被执行的 ...

  9. 微信qq,新浪等第三方授权登录的理解

    偶们常说的第三方是指的微信,qq,新浪这些第三方,因为现在基本每个人都有qq或者微信,那么我们就可以通过这些第三方进行登录.而这些网站比如慕课网是通过第三方获取用户的基本信息 它会有个勾选按钮,提示是 ...

  10. SSH 配置

    ssh免密通用配置 Host * Port 1234 User root #ProxyCommand nc -X 5 -x 127.0.0.1:1081 %h %p #5 socks5, 4 sock ...