CodeForces 1260D(二分+贪心+差分)
题意
https://vjudge.net/problem/CodeForces-1260D
有m个士兵,t秒,你要带尽可能多的士兵从0去n+1,且他们不能被杀死。路上有一些陷阱,陷阱d[i]会杀死能力比它小的士兵,陷阱位置在l[i],当你走到r[i]时可以拆除它。每次你可以向左或者向右移动。自己不会被陷阱杀死,可以先去把陷阱拆除再回来带兵。
思路
首先,贪心的选最强的一些士兵,即对士兵按能力从大到小排序,然后二分选的士兵数量x,如果花的时间小于等于t,那么就可以满足。
然后,考虑如何check,假设要带能力排前x的士兵,那么所有陷阱中大于第x个士兵的能力的都要被拆除,何时去拆呢?贪心的想肯定是先顺着走一遍把要拆的陷阱都拆了,然后一路返回再带士兵即可,而不是拆一个回来一次。
如何O(n)时间直到哪些点必须得走呢?差分,对陷阱位置cha[l[i]] +1,对拆除位置cha[r[i]+1] -1,因为这一段路必须要走,我们再求一遍前缀和,因为差分序列的前缀和即为修改后的序列,判断每个位置是否大于0,如果大于0,则表示这个点要走。最后再加上最后带士兵要从0走到n+1的时间,判断是否小于等于t即可。
代码
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=200005;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
int a[N],l[N],r[N],d[N],cha[N];
int m,n,k,t;
bool check(int x)
{
if(!x) return true;
for(int i=0;i<=n+1;i++)
cha[i]=0;
int g=a[x];
for(int i=1;i<=k;i++)
{
if(d[i]>g)
{
cha[l[i]]++,cha[r[i]+1]--;
}
}
int res=0;
for(int i=1;i<=n+1;i++)
{
cha[i]+=cha[i-1];
if(cha[i]>0)
res++;
}
return res*2+n+1<=t;
}
int main()
{
std::ios::sync_with_stdio(false);
cin>>m>>n>>k>>t;
for(int i=1; i<=m; i++)
cin>>a[i];
sort(a+1,a+1+m,greater<int>());
for(int i=1;i<=k;i++)
cin>>l[i]>>r[i]>>d[i];
int L=0,R=m,M,ans=0;
while(L<=R)
{
M=(L+R)>>1;
if(check(M))
{
ans=M;
L=M+1;
}
else
R=M-1;
}
cout<<ans<<endl;
return 0;
}
CodeForces 1260D(二分+贪心+差分)的更多相关文章
- Codeforces 732D [二分 ][贪心]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: n天进行m科考试,每科考试需要a的复习时间,n天每天最多可以考一科.并且指定哪天考哪科. 注意考试那天不能复习. 问最少需要多少天可全部通过考试. ...
- CodeForces - 551C 二分+贪心
题意:有n个箱子形成的堆,现在有m个学生,每个学生每一秒可以有两种操作: 1: 向右移动一格 2: 移除当前位置的一个箱子 求移除所有箱子需要的最短时间.注意:所有学生可以同时行动. 思路:二分时间, ...
- Codeforces 825D 二分贪心
题意:给一个 s 串和 t 串, s 串中有若干问号,问如何填充问号使得 s 串中字母可以组成最多的 t 串.输出填充后的 s 串. 思路:想了下感觉直接怼有点麻烦,要分情况:先处理已经可以组成 t ...
- Codeforces Gym 100231B Intervals 线段树+二分+贪心
Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description 给你n个区间,告诉你每个区间内都有ci个数 然后你需要 ...
- 2016-2017 ACM-ICPC CHINA-Final Ice Cream Tower 二分+贪心
/** 题目:2016-2017 ACM-ICPC CHINA-Final Ice Cream Tower 链接:http://codeforces.com/gym/101194 题意:给n个木块,堆 ...
- NOIP2015 运输计划(二分+LCA+差分)
4326: NOIP2015 运输计划 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 308 Solved: 208[Submit][Status] ...
- Luogu 2680 NOIP 2015 运输计划(树链剖分,LCA,树状数组,树的重心,二分,差分)
Luogu 2680 NOIP 2015 运输计划(树链剖分,LCA,树状数组,树的重心,二分,差分) Description L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之 ...
- Luogu 1083 借教室(二分,差分)
Luogu 1083 借教室(二分,差分) Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不 ...
- CodeForces - 158B.Taxi (贪心)
CodeForces - 158B.Taxi (贪心) 题意分析 首先对1234的个数分别统计,4人组的直接加上即可.然后让1和3成对处理,只有2种情况,第一种是1多,就让剩下的1和2组队处理,另外一 ...
随机推荐
- ABP入门教程13 - 更新菜单
点这里进入ABP入门教程目录 菜单更新 在展示层(即JD.CRS.Web.Mvc)的Startup下打开CRSNavigationProvider.cs //用以存放菜单相关信息 修改如下 using ...
- Flask报如下错误:SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning.
在同一个项目中由于flask_sqlalchemy版本不同,有时会报如下错误 错误信息如下: flask_sqlalchemy\__init__.py:: UserWarning: SQLALCHEM ...
- Linux系统学习 五、网络基础—网络通信协议
OSI/ISO七层模型和TCP/IP四层模型 网络层协议和IP划分 OSI的七层框架 物理层:设备之间的比特流的传输.物理接口.电气特性等. 数据链路层:成帧.用MAC地址访问媒介.错误检测与修正. ...
- 转载:关于STM32硬件I2C读写EEPROM代码实现原理的理解与总结
http://home.eeworld.com.cn/my/space-uid-716241-blogid-655190.html 一.I2C协议简介 I2C是两线式串行总线,用于连接微控制器及其外围 ...
- 图片base64编码解码
1.图片base64编码 https://c.runoob.com/front-end/59 2.图片base64解码 https://www.it399.com/image/base64 https ...
- Java程序猿怎么才能月薪过万?
每一个略微有点长进的人,都应该把作业里的前三名作为自己斗争的政策和对手.你离成为冠军Java程序员还有多远,看完这篇你就知道了. 软件工程师的作业生涯里,知识有一个三年的半衰期.这意味着三年后,你所具 ...
- Python程序中的线程操作-锁
目录 一.同步锁 1.1 多个线程抢占资源的情况 1.1.1 对公共数据的操作 1.2 同步锁的引用 1.3 互斥锁与join的区别 二.死锁与递归锁 2.1 死锁 2.2 递归锁RLock 三.典型 ...
- vs2010,vs2013,vs2015,vs2017, vs2019激活秘钥
vs2010============================================== YCFHQ9DWCYDKV88T2TMHG7BHP vs2013=============== ...
- Python连载50-贪婪匹配、XPath介绍
一.贪婪和非贪婪 1.贪婪:尽可能多的匹配,(*)表示贪婪匹配 2.非贪婪:找到符合条件的最小内容即可,(?)表示非贪婪 3.正则默认使用贪婪匹配 import re title = u"& ...
- make 命令与 Makefile
make 是一个工具程序,通过读取 Makefile 文件,实现自动化软件构建.虽然现代软件开发中,集成开发环境已经取代了 make,但在 Unix 环境中,make 仍然被广泛用来协助软件开发.ma ...