正题

题目链接:http://noi.ac/contest/266/problem/795


题目大意

nnn个人第iii个巡逻一次aia_iai​秒,休息至少bib_ibi​秒。
要求

  1. 任意时刻都有人巡逻
  2. 在一个人的两次相邻的巡逻直接不能有另一个人巡逻两次。

解题思路

对于性质二我们发现就是在nnn个人里选择最少的人轮流巡逻使得任意时刻都有人巡逻。

我们考虑贪心,将人按照bib_ibi​排序,然后枚举就好了,这样我们就确定了最大的bib_ibi​,所以我们要求前面的最大的数的和使得它的和足够就好了。

但是这样我们会发现有许多问题,因为这个人两次巡逻的间隔是不计算自己的巡逻时间的,
也就是sum−ai>bi⇒sum>bi+aisum-a_i>b_i\Rightarrow sum>b_i+a_isum−ai​>bi​⇒sum>bi​+ai​

所以我们改为按照bi+aib_i+a_ibi​+ai​排序就好了,然后对顶堆维护前若干个最大值使得他们的和满足max{bi+ai}max\{b_i+a_i\}max{bi​+ai​}


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
const ll N=5e5+10;
struct node{ll t,b;
}a[N];
ll n,sum,z,ans=2147483647;
priority_queue<ll> q1,q2;
bool cmp(node x,node y)
{return x.b==y.b?x.t<y.t:x.b<y.b;}
int main()
{//freopen("data.in","r",stdin);scanf("%lld",&n);for(ll i=1;i<=n;i++){scanf("%lld%lld",&a[i].t,&a[i].b);a[i].b+=a[i].t;}sort(a+1,a+1+n,cmp);for(ll i=1;i<=n;i++){if(q1.empty()||a[i].t>-q1.top()){q1.push(-a[i].t);sum+=a[i].t;z++;}else q2.push(a[i].t);while(!q1.empty()&&sum>=a[i].b){sum+=q1.top();z--;q2.push(-q1.top());q1.pop();}while(!q2.empty()&&sum<a[i].b){sum+=q2.top();z++;q1.push(-q2.top());q2.pop();}if(sum>=a[i].b){ans=min(ans,z);}}if(ans==2147483647) printf("-1");else printf("%lld",ans);
}

NOI.AC-保镖【贪心,对顶堆】相关推荐

  1. 野鸡NOI.AC模拟赛【2019.10.26】

    前言 截止至2019.10.2614:222019.10.26\ \ \ \ 14:222019.10.26    14:22 成绩 正题 T1:NOI.AC−T1:NOI.AC-T1:NOI.AC− ...

  2. nssl1477-赛【对顶堆,贪心】

    正题 题目大意 nnn个物品,有两个人,每个人有一些喜欢的物品. 选mmm个物品,至少选择kkk个第一个人喜欢的和kkk个第二个人喜欢的物品 解题思路 首先我们必定是选最小的 我们从小到大枚举选择多少 ...

  3. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  4. 106. 动态中位数【经典 / 对顶堆】

    用对顶堆来维护.一个大根堆,一个小根堆. 大根堆存前一半的数据,小根堆存后一半的数据. 需要满足这样的一个条件: 大根堆最大的数<=小根堆最小的数 大根堆的数量最多比小根堆的数量多1,这样大根堆 ...

  5. NOI.AC#2007-light【根号分治】

    正题 题目链接:http://noi.ac/problem/2007 题目大意 nnn个格子排成一排,每个格子有一个0/10/10/1和一个颜色.开始每个格子都是000,qqq次操作取反一个颜色的所有 ...

  6. NOI.AC#2139-选择【斜率优化dp,树状数组】

    正题 题目链接:http://noi.ac/problem/2139 题目大意 给出nnn个数字的序列aia_iai​.然后选出一个不降子序列最大化子序列的aia_iai​和减去没有任何一个数被选中的 ...

  7. NOI.AC#2144-子串【SAM,倍增】

    正题 题目链接:http://noi.ac/problem/2144 题目大意 给出一个字符串sss和一个序列aaa.将字符串sss的所有本质不同子串降序排序后,求有多少个区间[l,r][l,r][l ...

  8. NOI.AC#2266-Bacteria【根号分治,倍增】

    正题 题目链接:http://noi.ac/problem/2266 题目大意 给出nnn个点的一棵树,有一些边上有中转站(边长度为222,中间有一个中转站),否则就是边长为111. mmm次询问一个 ...

  9. HDOJ 2037 今年暑假不AC 【贪心】

    HDOJ 2037 今年暑假不AC [贪心] 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2037 给出n个电视节目的开始时间和结束时间, 要求合理安 ...

最新文章

  1. 点分治问题 ----------- HDU 5977 or 2016年大连ICPC [点分治+状态压缩]
  2. php类实例方法静态方法,PHP类中的静态方法使用实例
  3. 关于java数组拷贝的性能
  4. python3语法都相同吗_python3.4学习笔记(一) 基本语法 python3不向下兼容,有些语法跟python2.x不一样...
  5. python3获取用户输入_python3.4控制用户输入与输出
  6. 导致集群重启_园区网核心交换机S7706异常重启导致无线网络故障
  7. win7 64位装sql2000
  8. 文本挖掘学习笔记(三):文档相似度、文档分类和情感分析
  9. 大数据“超能力”:数据安全和隐私该如何保障?
  10. vbox虚拟机网络设置
  11. rpm包与deb包的制作过程
  12. 创建和使用静态链接库
  13. 1、MyBatis框架入门学习CRUD
  14. Android如何降低service被杀死概率
  15. express 获取ip地址,并获取ip对应的城市名
  16. Excel·VBA指定条件删除整行整列
  17. 面向服务的整车E/E架构(SOA)开发咨询服务
  18. tomcat增大缓存的最大空间
  19. zzulioj1098: 复合函数求值(函数专题)
  20. mac:恢复出厂设置

热门文章

  1. java 按钮设置图片_Java中如何设置带图片按钮的大小
  2. android菜单和对话栏,Android回顾--(十一) 菜单和对话框
  3. java 创建以太坊代币_以太坊 (五)编写智能合约-建立简易加密代币
  4. linux内核修改工程环境,linux2.6.33内核移植s3c2410以和交叉环境编译搭建最终修改版.pdf...
  5. win10+tomcat+php+配置环境变量配置,Win10系统Tomcat环境变量配置方法
  6. mysql数据聚合技术_Mysql 去重 聚合
  7. spring boot 中@Mapper和@Repository的区别
  8. Leetcode周赛复盘——第 278 场力扣周赛
  9. Java Number Math 类方法
  10. [Java基础]抽象类和接口名作为形参和返回值