题意:就是让你写出一个邀请朋友的顺序,朋友答应一起出去玩的条件是除他以外所有同意出去玩的人数要在[ l[i], r[i] ]范围内,否则他就不答应。

分析:这题比赛的时候想麻烦了,其实只要在左边界满足的条件下看右边界就可以。

     首先将左边界满足的所有右边界及其id加到一个按右边界值从小到大排序的优先队列里,然后取第一个右边界,如果右边界值小于当前所有同意出去玩的人数,直接将其pop()掉,继续看队列里的第一个元素,否则将此id保存下来,总人数+1,pop()掉第一个元素,继续添加左边界满足条件的右边界及id值。

Tips:  ①优先队列"priority_queue<int> pq;"是一个越小的整数优先级越低的优先队列。

    若想越小的整数优先级越高,则可以这样定义:"priority_queue<int,vector<int>, greater<int> > pq;"

     ②对于将右边界与id值插入到优先队列我们可以利用"pair<first, second>"来实现,"pair<first, second>"中默认的比较运算符为先比较first再比较second;\

    同样要想让优先队列中右边界小的优先级越高,则可以"priority_queue<pii,vector<pii>, greater<pii> > pq;";

        标程里有更巧妙的就是直接取右边界值的相反数,这样就可以直接定义"priority_queue<pii> pq;"了;

     ③比较坑的一点用"priority_queue<pii,vector<pii>, greater<pii> > pq;"定义的时候在hdu上用C++交会返回编译错误,G++就会过;这两个的区别还是搞不懂。欢迎各路大神解惑。

附标程

 #include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
typedef pair<int, int> PII;
const int MAXN = + ; struct W
{
int l, r, id;
bool operator < (const W &rhs) const
{
return l < rhs.l || (l == rhs.l && r < rhs.r);
}
} A[MAXN]; int ret[MAXN], vs[MAXN], n; int main()
{
int T;
scanf("%d", &T);
for (int _ = ; _ < T; ++ _)
{
scanf("%d", &n);
for (int i = ; i < n; ++ i)
{
scanf("%d", &A[i].l);
A[i].id = i;
vs[i] = ;
}
for (int i = ; i < n; ++ i)
{
scanf("%d", &A[i].r);
}
sort(A, A + n);
priority_queue<PII> Q;
int cnt(), i();
while ()
{
while (i < n && A[i].l <= cnt) Q.push(PII(-A[i].r, A[i].id)), ++ i;
while (!Q.empty() && -Q.top().first < cnt) Q.pop();
if (Q.empty()) break;
ret[cnt ++] = Q.top().second;
Q.pop();
vs[ret[cnt - ]] = ;
}
printf("%d\n", cnt);
for (int i = ; i < n; ++ i) if (!vs[i]) ret[cnt ++] = i;
for (int i = ; i < n; ++ i)
{
printf("%d%c", ret[i] + , " \n"[i == n - ]);
}
}
return ;
}

附G++ AC代码

 #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn = ;
typedef pair<int, int> pii;
struct Node
{
int id, l, r;
Node () {}
Node (int _id, int _r) : id(_id), r(_r) {}
bool operator < (const Node& rhs) const
{
return l < rhs.l || (l == rhs.l && r < rhs.r);
}
}a[maxn];
int vis[maxn], id[maxn];
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
int n; scanf("%d", &n);
for(int i = ; i < n; i++) scanf("%d", &a[i].l), a[i].id = i, vis[i] = ;
for(int i = ; i < n; i++) scanf("%d", &a[i].r);
sort(a, a+n);
priority_queue<pii, vector<pii>, greater<pii> > pq;
int cur = , cnt = ;
while()
{
while(cur < n && a[cur].l <= cnt)
pq.push(pii(a[cur].r, a[cur].id)), cur++; while(!pq.empty() && cnt > (pq.top()).first)
pq.pop(); if(!pq.empty())
{
vis[pq.top().second] = ;
id[cnt++] = pq.top().second;
pq.pop();
}
else break;
}
printf("%d\n", cnt);
for(int i = ; i < n; i++)
if(!vis[i])
id[cnt++] = i;
for(int i = ; i < cnt; i++)
{
if(i) printf(" ");
printf("%d", id[i]+);
}
printf("\n");
}
return ;
}

【优先队列】【最近连STL都写不出来了/(ㄒoㄒ)/~~】hdu_5360/多校#6_1008的更多相关文章

  1. jQuery之父:每天都写点代码

    去年秋天,我的“兼职编程项目”遇到了一些问题:要不是从 Khan Academy 的项目里挪出时间来的话,我根本没办法将不理想的进度弥补上. 这些项目遇到了一些严重的问题.之前的工作我主要是在周末,有 ...

  2. Method Swizzing中一般替换方法都写在Category类别里吗?有没有别的实现方式

    Method Swizzing中一般替换方法都写在Category类别里吗?有没有别的实现方式 Method Swizzing中一般替换方法都写在Category类别里吗?有没有别的实现方式 > ...

  3. php重建二叉树(函数缺省参数相关的都写在后面,比如array_slice函数中的$length属性,故第一个参数是操作的数组)

    php重建二叉树(函数缺省参数相关的都写在后面,比如array_slice函数中的$length属性,故第一个参数是操作的数组) 一.总结 牛客网和洛谷一样,是真的好用 二.php重建二叉树 输入某二 ...

  4. ? 原创: 铲子哥 搜狗测试 今天 shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作。那么问题来了,在一个脚本中怎么调用其他的脚本呢?有三种方式,分别是fork、source和exec。 1. fork 即通过sh 脚本名进行执行脚本的方式。下面通过一个简单的例子来讲解下它的特性。 创建father.sh,内容如下: #!/bin/bas

    ? 原创: 铲子哥 搜狗测试 今天 shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作.那么问题来了,在一个脚本中怎么调用其他的脚本呢?有三种方式,分别 ...

  5. 人人都写过的5个Bug!

    大家好,我是良许. 计算机专业的小伙伴,在学校期间一定学过 C 语言.它是众多高级语言的鼻祖,深入学习这门语言会对计算机原理.操作系统.内存管理等等底层相关的知识会有更深入的了解,所以我在直播的时候, ...

  6. C++STL手写版

    手写STL,卡常专用. node为变量类型,可以自由定义,以下不再赘述. 1.stack(栈) 开一个数组,和一个top指针,压栈时++,弹栈时--即可. struct stack{ int tp;n ...

  7. 转C++之stl::string写时拷贝导致的问题

    前几天在开发某些数据结构到文件的 Dump 和 Load 功能的时候, 遇到的一个 bug . [问题复现] 问题主要出在 Load 过程中,从文件读取数据的时候, 直接使用 fread 的去操作 s ...

  8. css文件都写在一个里面还是每个页面都引用单独的css样式好?

    因为网站比较小,外加网站页面有很多重复构件,决定采用“构件复用”搭建网页,但是遇到了一个问题.因为虽然有共同的css,但是每个页面或多或少都有独立的样式控制,到底是写在同一个css还是分离看上去清楚一 ...

  9. Delphi/C#之父首次访华:55岁了 每天都写代码

    Delphi.C#之父Anders Hejlsberg 近日首次访华,并在10月24日和27日参加了两场见面会,分享了他目前领导开发的TypeScript项目,并与国内前端开发者近距离交流.本文就为读 ...

随机推荐

  1. Spring Auto-Wiring Beans with @Autowired annotation

    In last Spring auto-wiring in XML example, it will autowired the matched property of any bean in cur ...

  2. Chapter 8. Classes

    8.1. Class Declarations 8.1.1. Class Modifiers 8.1.1.1. abstract Classes 8.1.1.2. final Classes 8.1. ...

  3. js隐藏

    function openLoadingIcon(){ $("#dataLoading").css("display","block"); ...

  4. Spring Hibernate4 整合配置文档

    1 applicationContext.xml配置文档 <?xml version="1.0" encoding="UTF-8"?><bea ...

  5. VLAN设置

    A Logical Network is a way of representing networks in your datacenter that have the same connectivi ...

  6. Middleware课程01-概述

    中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源.中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯.是连接两个独立应用程序或独立系统的软件.相 ...

  7. Codeforces Gym 100342D Problem D. Dinner Problem Dp+高精度

    Problem D. Dinner ProblemTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1003 ...

  8. GLSL 基础量定义

    GLSL语法跟C语言非常相似: 1.数据类型: GLSL包含下面几种简单的数据类型 float bool :false or ture int 向量: vec   {2,3,4}     长度为2, ...

  9. ORACLE 11G用于有效期

    Oracle报错,ORA-28001: 口令已经失效(转自网络) 错误信息:ORA-28001: the password has expired解决方法 Oracle11G创建用户时缺省passwo ...

  10. 如何用eclispe远程调试tomcat--转载

    原文地址:http://jingyan.baidu.com/article/0320e2c1f4ef6b1b87507b06.html tomcat是一种非常常见的java web应用服务器,有时候服 ...