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入门教程4 - 初始化运行
			点这里进入ABP入门教程目录 编译解决方案 重新生成解决方案,确保生成成功. 连接数据库 打开JD.CRS.Web.Host / appsettings.json,修改数据库连接设置Connectio ... 
- bay——巡检RAC操作.txt
			Oracle Cluster Software 包括下列组件:Event Management (EVM)Cluster Synchronization Services (CSS)Cluster R ... 
- 线性代数笔记24——微分方程和exp(At)
			原文:https://mp.weixin.qq.com/s/COpYKxQDMhqJRuMK2raMKQ 微分方程指含有未知函数及其导数的关系式,解微分方程就是找出未知函数.未知函数是一元函数的,叫常 ... 
- 注意设置httpclient连接数
			在使用Httpclient的过程中,当访问量增大的时候,会发现本地的连接等待时间急剧增加,例如从400ms增加到 78000ms,之前一直以为是航信系统问题,后面经过检查才发现,原来是本地httpcl ... 
- js 记录几个因惯性思维引发的代码BUG,开发思维方式的自我反省
			壹 ❀ 引 在写这篇文章之前,对于取什么标题其实让我纠结了好几天,这篇文章中我想说的东西与引用类型数据有关,也与我们的惯性思维有关.本文中展示的几段代码都非常简单,原型都来自于我的日常开发,但让你立 ... 
- Thymeleaf入门与基础语法
			1.简介 Thymeleaf是用来开发Web和独立环境项目的现代服务器端Java模板引擎. Thymeleaf的主要目标是为您的开发工作流程带来优雅的自然模板 - HTML.可以在直接浏览器中正确显示 ... 
- IT兄弟连 HTML5教程 了解HTML5的主流应用1
			在很多人眼里,HTML5与互联网营销密切相关,但其实从开发者的角度而言,它是一种网页标准,定义了浏览器语言的编写规范.伴随HTML5标准尘埃落定,浏览器对HTML5特性的逐步支持,再加上国内对HTML ... 
- tomcat项目下载中文文件乱码问题
			最近遇到在tomcat运行的项目下载文件时候都出现了乱码,然后经过排查是只有中文命名的文件才有问题,所以就推测有可能和tomcat的编码有关系 tomcat默认的编码:iso8859-1,所以中文的文 ... 
- win10启动telnet
			1.点击win菜单,点击设置图标 2.选择系统选项 3.选择应用与程序选项 4.拉到最下方,选择程序与功能 5.选择启用或关闭windows功能 6.下拉找到telnet客户端选项勾选 
- C#上手练习6(方法语句1)
			方法是将完成同一功能的内容放到一起,方便书写和调用的一种方式,也体现了面向对象语言中封装的特性. 定义方法的语法形式如下. 访问修饰符 修饰符 返回值类型 方法名(参数列表){ ... 
