HDU 6301 (贪心+优先队列)
题目大意:
求一个长度为n的数列, 给出m个区间,这m个区间各自区间内的数不同
题解:
用优先队列来模拟过程 , 解题思路是想到了 , 可是不知道如何实现 , 果然还须继续努力呀
这道题思路是去掉重复的区间(取最大的区间,用sort+结构体加几个判断条件来实现),用优先队列维护1-n 中没有出现的数(比如给你一个10 3 [2 8] [1 5] [6 10] 的样例,把1 到 10 push进优先队列后,排序后[1 5] 这个区间先,所以先从优先队列里取 1 2 3 4 5,此时队列剩下6 7 8 9 10,下个区间 [2 8] ,我们先把[ 1 2 )这个区间也就是上次剩下的数丢到优先队列里面去。现在优先队列剩下 1 6 7 8 9 10 ,需要从里面取出8 - 5 个数,所以结果现在是1 2 3 4 5 1 6 7 。下个区间[ 6 10 ] ,丢[2 6)这个区间的数进优先队列,也就是 2 3 4 5 这四个数。再从这四个数取 10 - 8 个,所以答案是
1 2 3 4 5 1 6 7 2 3)
参考博客https://blog.csdn.net/YVVVVY/article/details/81186755
#include<stdio.h>
#include<algorithm>
#include<queue>
using namespace std ;
int n,m;
int ans[];
struct no
{
int u,v;
}a[];
bool cmp(no a , no b)
{
if(a.u==b.u)
return a.v>b.v;
return a.u<b.u;
}
priority_queue <int,vector<int>,greater<int> > que;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{ scanf("%d%d",&n,&m);
for(int i= ; i<m ; i++)
{
scanf("%d%d",&a[i].u,&a[i].v); } sort(a,a+m,cmp);
while(!que.empty())
que.pop(); for(int i= ; i<=n ; i++)
ans[i]=;
for(int i= ; i<=n ; i++)
que.push(i);
int l,r,Tr,Tl;
l=r=;
Tl=a[].u;
Tr=Tl-;
for(int i= ; i<m ; i++)
{
if(a[i].u>l && a[i].v >r)
{
r=a[i].v;
l=a[i].u; for(int j=Tl ; j<l ; j++)
que.push(ans[j]); for(int j=Tr+ ; j<=r ; j++)
{
ans[j]=que.top();
que.pop(); }
Tr=r;Tl=l;
}
}
printf("%d",ans[]);
for(int i = ;i <= n;i++){
printf(" %d",ans[i]);
}
puts(""); }
}
HDU 6301 (贪心+优先队列)的更多相关文章
- HDU 6396 贪心+优先队列+读入挂
Swordsman Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- HDU 6438 网络赛 Buy and Resell(贪心 + 优先队列)题解
思路:维护一个递增队列,如果当天的w比队首大,那么我们给收益增加 w - q.top(),这里的意思可以理解为w对总收益的贡献而不是真正获利的具体数额,这样我们就能求出最大收益.注意一下,如果w对收益 ...
- hihoCoder 1309:任务分配 贪心 优先队列
#1309 : 任务分配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定 N 项任务的起至时间( S1, E1 ), ( S2, E2 ), ..., ( SN, ...
- UVA 11134 - Fabled Rooks(贪心+优先队列)
We would like to place n rooks, 1 ≤ n ≤ 5000, on a n×n board subject to the following restrict ...
- C. Playlist Educational Codeforces Round 62 (Rated for Div. 2) 贪心+优先队列
C. Playlist time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- 贪心+优先队列 HDOJ 5360 Hiking
题目传送门 /* 题意:求邀请顺序使得去爬山的人最多,每个人有去的条件 贪心+优先队列:首先按照l和r从小到大排序,每一次将当前人数相同的被邀请者入队,那么只要能当前人数比最多人数条件小,该人能 被邀 ...
- [POJ1456]Supermarket(贪心 + 优先队列 || 并查集)
传送门 1.贪心 + 优先队列 按照时间排序从前往后 很简单不多说 ——代码 #include <queue> #include <cstdio> #include <i ...
- Painting The Fence(贪心+优先队列)
Painting The Fence(贪心+优先队列) 题目大意:给 m 种数字,一共 n 个,从前往后填,相同的数字最多 k 个在一起,输出构造方案,没有则输出"-1". 解题思 ...
- CF140C New Year Snowmen(贪心+优先队列)
CF140C 贪心+优先队列 贪心策略:每次取出数量最多的三种球,合成一个答案,再把雪球数都-1再插回去,只要还剩下三种雪球就可以不断地合成 雪球数用优先队列维护 #include <bits/ ...
- hdu 6301 Distinct Values (思维+set)
hdu 6301 Distinct Values 题目传送门 题意: 给你m个区间,让你求出一个长度为n的区间且满足在这些区间的数不重复, 并且要求字典序最小 思路: 如果我们已经求出这个序列了,你会 ...
随机推荐
- Solidity字符串拼接实现oraclize动态查询
solidity本身没有字符串拼接功能,但是如果你恰巧要用oraclize api,那么可以使用oraclize api中的字符串拼接方法(strConcat).之所以oraclize api里会有s ...
- 在aspx页面中使用三元表达式
第一种使用方法:判断GridView绑定的数据是否为空 用GridView或其他控件绑定数据的时候,有时候需要判断从数据库中获取的值是否是空值,然后显示相应的内容,如果在后置代码中写的话只有是在Row ...
- Part5核心初始化_lesson1---异常向量表
1.1异常 异常向量: 异常向量表: 代码的编写 start.S文件 gboot.lds链接器脚本文件 makefile工程文件:
- HTTP协议相关介绍
一.HTTP请求方法 根据HTTP标准,HTTP请求可以使用多种请求方法.HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法.HTTP1.1新增了五种请求方法:OPTIONS, ...
- 命令之 ulimit
help ulimit help ulimit ulimit: ulimit [-SHacdefilmnpqrstuvx] [limit] Modify shell resource limits. ...
- 再解炸弹人——BFS
原创 之前用了枚举法解炸弹人,题目详情请看我之前的博客:https://www.cnblogs.com/chiweiming/p/9295262.html 利用枚举法是无视地图布局的,枚举法直接全局搜 ...
- Regex 常用的正则表达式
.校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非 ...
- 「CF932E」 Team Work
题目链接 戳我 题意 有\(n\)个箱子,从中选出\(i\)个箱子,然后把\(k\)个不同的球装在这\(i\)个箱子中,求方案数. 实际上这题就是求: \[ \sum_{i=1}^nc_n^i*i^k ...
- php 文件、目录操作函数
目录 opendir readdir closedir mkdir rmdir : 只能删除空目录 文件 filetype filesize is_file basename dirname pat ...
- 关于MultiDataTrigger和MultiTrigger的一些注意事项
他俩有着相同的语法. 都是在conditions中编写触发条件. 因为都是同一个触发类. 在conditions中有Property和Binding这两个属性.那么这两个可以同时使用吗?当然是不可以的 ...