HDU 5360 【优先队列+贪心】
题意:
给定N个无序区间。
对合法区间的定义是:
在这个区间之前已经选出了至少l个合法区间,最多选出了r个合法区间。则该区间为合法区间。
输出最多能挑选出多少个合法区间,并输出合法区间的数量。
思路:
先对原来给定的区间按照l从小到达排序。
然后从选了0个合法区间开始,每次在队列中加入l小于等于之前已选合法区间数的区间加入队列, 按照r从小到大进行优先排列。每次从队列中拿出top,当拿出的区间r小于已经找到的区间数时,我们把他放到临时数组里边。每次选出一个合法区间就更新一下队列的成员,将l小于等于当前合法数的都加入队列。直到无法加入并且队列为空停止循环。
最后输出的数字有三部分,包括没有加入队列的,加入队列但是r值较小变成非法区间的和按照一定次序加入队列的。
注意输出格式。
/*************************************************************************
> File Name: D.cpp
> Author: ttpond
> Created Time: 2015-8-22 16:40:42
************************************************************************/
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<set>
using namespace std;
struct st
{
int l,r,id;
};
st tree[];
bool ccmp(st a,st b)
{
return a.l<b.l;
}
struct cmp
{
bool operator()(const st &a,const st &b)
{
return a.r>b.r;
}
};
int main()
{
int t,tt;
scanf("%d",&t);
for(tt=;tt<t;tt++)
{
int n;
priority_queue<st,vector<st>,cmp>q;
//priority_queue<st,vector<st>,ccmp>s;
scanf("%d",&n);
for(int i=;i<n;i++)
{
tree[i].id=i+;
}
for(int i=;i<n;i++)
{
scanf("%d",&tree[i].l);
}
for(int i=;i<n;i++)
{
scanf("%d",&tree[i].r);
}
sort(tree,tree+n,ccmp);
//for(int i=0;i<n;i++)
//{
// printf("%d %d %d\n",tree[i].l,tree[i].r,tree[i].id);
//}
// int a;
//while(1)
// scanf("%d",&a);
vector<int>tmpp;
vector<int>v;
vector<int>::iterator it;
int sst=;
int num=;
st tmp;
bool ok;
for(;num<n||(!q.empty());)
{
ok=;
while(num<n&&tree[num].l<=sst)
{
q.push(tree[num]);
num++;
ok=;
}
if((!ok)&&q.empty())
{break;}
ok=;
while(!q.empty())
{
tmp=q.top();
q.pop();
if(tmp.r>=sst)
{
sst++;
v.push_back(tmp.id);
ok=;
break;
}
tmpp.push_back(tmp.id);
}
if(!ok)
{break;}
}
ok=;
printf("%d\n",v.size());
for(it=v.begin();it!=v.end();it++)
{
if(it!=v.begin())
printf(" %d",*it);
else
{
ok=;
printf("%d",*it);
}
}
int ttt=;
for(;num<n;num++)
{
if((!ok)&&ttt==)
{
ok=;
printf("%d",tree[num].id);
ttt++;
}
else
{
printf(" %d",tree[num].id);
}
}
//int a;
//while(1)
//{
// scanf("%d",&a);
//}
for(it=tmpp.begin();it!=tmpp.end();it++)
{
if((!ok)&&it==tmpp.begin())
{
printf("%d",*it);
}
else
{
printf(" %d",*it);
}
}
printf("\n");
}
}
HDU 5360 【优先队列+贪心】的更多相关文章
- 2015多校第6场 HDU 5360 Hiking 贪心,优先队列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意:给定n个人,现在要邀请这些人去远足,但每个人同意邀请的条件是当前已经同意去远足的人数c必须 ...
- HDU 5360 (贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意:告诉你n个区间[ l[i],r[i] ],然后让你排序,必须左区间不大于它前边的总区间个数 ...
- hdu 4544 优先队列+贪心
题意:最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏.游戏规则很简单,用箭杀死免子即可.箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为Di ...
- HDU 5360 Hiking (贪心)
题意:邀请 n 参加聚会,如果在邀请第 i 个人之前,已经成功邀请了 x 个人,并且 li <= x <= ri,那么第 i 人才会去,问你怎么排列使得邀请的人最多. 析:对于所有的人,按 ...
- 最高的奖励 - 优先队列&贪心 / 并查集
题目地址:http://www.51cpc.com/web/problem.php?id=1587 Summarize: 优先队列&贪心: 1. 按价值最高排序,价值相同则按完成时间越晚为先: ...
- Hdu 4864(Task 贪心)(Java实现)
Hdu 4864(Task 贪心) 原题链接 题意:给定n台机器和m个任务,任务和机器都有工作时间值和工作等级值,一个机器只能执行一个任务,且执行任务的条件位机器的两个值都大于等于任务的值,每完成一个 ...
- POJ2431 优先队列+贪心 - biaobiao88
以下代码可对结构体数组中的元素进行排序,也差不多算是一个小小的模板了吧 #include<iostream> #include<algorithm> using namespa ...
- hdu3438 Buy and Resell(优先队列+贪心)
Buy and Resell Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- D - 淡黄的长裙 HDU - 4221(贪心)
D - 淡黄的长裙 HDU - 4221(贪心) James is almost mad! Currently, he was assigned a lot of works to do, so ma ...
- hdu 5360 Hiking(优先队列+贪心)
题目:http://acm.hdu.edu.cn/showproblem.php? pid=5360 题意:beta有n个朋友,beta要邀请他的朋友go hiking,已知每一个朋友的理想人数[L, ...
随机推荐
- springboot的多个配置文件的关系
一般我们在使用springboot时会用到多个环境下的配置文件,例如 application-dev.yml:开发环境 application-uat.yml:用户验收测试环境 application ...
- 洛谷 P1618 三连击(升级版)
题目描述 将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数的比例是A:B:C,试求出所有满足条件的三个三位数,若无解,输出“No!!!”. //感谢黄小U饮品完善题意 输入输出格 ...
- SOE 第五章
SEO第五章 本次课目标: 1. 掌握代码优化 2. 掌握内链优化 一.代码优化 1)<h>标签 代表网页的标题,总共6个级别(h1-h6) 外观上显示字体的大小的修改,其中<h ...
- PHP环境搭建Zend Studio 10.6.2+WampServer2.4
址:http://www.zend.com/en/products/studio/downloads直接下载地址:http://downloads.zend.com/studio-eclipse/10 ...
- ElasticSearch使用spring-data-elasticSearch的用法
spring-data-Elasticsearch 使用之前,必须先确定版本,elasticsearch 对版本的要求比较高. spring和elasticsearch有两种链接方式,一种是用TCP协 ...
- js Math 对象
Math 对象方法 方法 描述 abs(x) 返回数的绝对值. acos(x) 返回数的反余弦值. asin(x) 返回数的反正弦值. atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值 ...
- 初次改app
没有学过安卓,突然需要改app里的一个bug,一个没搞过安卓的人要怎么入手去改这个安卓的代码呢?下面看看我入手的步骤 首先,页面上有几个文字“曲线分析”,那么在项目里找到这个文字,就可以找到这个页面的 ...
- axure使用经验
泛化不常用======伸展也是拉动原件收缩也是拉动原件====== 动态模板相互影响(有的时候会出现这个问题,只需要设置两者的高度,不让两者有包含关系(一点点可以有):====== 实现高级菜单栏(同 ...
- arx 地址
2014(32位和64位版本) ObjectARX 2014 SDKObjectARX 2014 帮助文档2013(32位和64位版本) ObjectARX 2013 SDKObjectARX 201 ...
- 最近公共祖先-三(RMQ-ST)
描述 上上回说到,小Hi和小Ho使用了Tarjan算法来优化了他们的"最近公共祖先"网站,但是很快这样一个离线算法就出现了问题:如果只有一个人提出了询问,那么小Hi和小Ho很难决定 ...