传送门

表示去年考普及组的时候失了智,现在看来并不是很难啊。

直接二分答案然后单调队列优化dp检验就行了。

注意入队和出队的条件。

代码:

#include<bits/stdc++.h>
#define N 500005
using namespace std;
inline int read(){
	int ans=0,w=1;
	char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans*w;
}
int n,d,k,x[N],s[N],q[N],f[N],hd,tl;
inline bool check(int mid){
	hd=1,tl=0,q[1]=0;
	int pos=0;
	int l=max(d-mid,1),r=d+mid;
	for(int i=1;i<=n;++i)f[i]=-1e9;
	for(int i=1;i<=n;++i){
        while(x[pos]<=x[i]-l){
            if(f[pos]==-0x3f3f3f3f){++pos;continue;}
            while(hd<=tl&&f[pos]>=f[q[tl]])--tl;
            q[++tl]=pos,++pos;
        }
        while(hd<=tl&&x[q[hd]]<x[i]-r)++hd;
        if(hd<=tl)f[i]=f[q[hd]]+s[i];
        else f[i]=-0x3f3f3f3f;
        if(f[i]>=k)return true;
    }
	return false;
}
int main(){
	n=read(),d=read(),k=read();
	for(int i=1;i<=n;++i)x[i]=read(),s[i]=read();
	int l=0,r=100000,ans=-1;
	while(l<=r){
		int mid=l+r>>1;
		if(check(mid))r=mid-1,ans=mid;
		else l=mid+1;
	}
	printf("%d",ans);
	return 0;
}

2018.09.26洛谷P3957 跳房子(二分+单调队列优化dp)的更多相关文章

  1. 洛谷luogu3957跳房子(单调队列优化)

    QwQ被普及组的题折磨的死去活来. 硬是卡线段树,没卡过QwQ oi生涯,第一道正经的单调队列dp题 进入正题 题目大意: 其中\(n \le 500000\) 看到这个题的第一感觉就是二分金币数 很 ...

  2. 2018.09.10 bzoj1499: [NOI2005]瑰丽华尔兹(单调队列优化dp)

    传送门 单调队列优化dp好题. 这题其实很简单. 我们很容易想到一个O(T∗n∗m)" role="presentation" style="position: ...

  3. [BZOJ1044][HAOI2008]木棍分割 二分 + 单调队列优化dp + 滚动数组优化dp

    Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连接处, 砍完后n根木棍被分成了很多段,要求满足总长度最大的一段长 ...

  4. 洛谷 P3957 跳房子 —— 二分答案+单调队列优化DP

    题目:https://www.luogu.org/problemnew/show/P3957 先二分一个 g,然后判断: 由于转移的范围是一个区间,也就是滑动窗口,所以单调队列优化: 可以先令队尾为 ...

  5. BZOJ2806 [Ctsc2012]Cheat 【后缀自动机 + 二分 + 单调队列优化DP】

    题目 输入格式 第一行两个整数N,M表示待检查的作文数量,和小强的标准作文库 的行数 接下来M行的01串,表示标准作文库 接下来N行的01串,表示N篇作文 输出格式 N行,每行一个整数,表示这篇作文的 ...

  6. 【BZOJ2806】[Ctsc2012]Cheat 广义后缀自动机+二分+单调队列优化DP

    [BZOJ2806][Ctsc2012]Cheat Description Input 第一行两个整数N,M表示待检查的作文数量,和小强的标准作文库的行数接下来M行的01串,表示标准作文库接下来N行的 ...

  7. 2018.09.26洛谷P1084 疫情控制(二分+倍增)

    传送门 好题啊. 题目要求的最大值最小,看到这里自然想到要二分答案. 关键在于怎么检验. 显然对于每个点向根走比向叶节点更优. 因此我们二分答案之后,用倍增将每个点都向上跳到跳不动为止. 这时我们ch ...

  8. 2018.09.26 洛谷P2464 [SDOI2008]郁闷的小J(map+vector)

    传送门 本来出题人出出来想考数据结构的. 但是我们拥有map+vector/set这样优秀的STL,因此直接用map离散化,vector存下标在里面二分找答案就行了. 代码: #include< ...

  9. 洛谷P3957 跳房子

    普及组的题.....填坑来了. 当年的我一眼二分+DP,现在都佩服起自己来了...... 然后我们就写个二分,在check里面写单调队列优化DP即可. 然后就A了...... #include < ...

随机推荐

  1. C# ADO.NET 封装的增删改查

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. 使用seaborn制图(柱状图)

    import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 设置风格, ...

  3. J2SE 8的脚本

    1. 引擎工厂的属性 引擎 名字 MIME类型 文件扩展 Nashorn nashorn,Nashornjs,JSJavaScript,javascriptECMAScript,mcmascript ...

  4. Activity服务类-7 RepositoryService服务类

    Activity服务类-1 RepositoryService服务类一共47个接口1.创建部署//开始创建一个新的部署.DeploymentBuilder createDeployment(); 2. ...

  5. YII assets使用

    为什么用YII assets 1.assets的作用是方便模块化,插件化的,一般来说出于安全原因不允许通过url访问protected下面的文件 ,但是我们又希望将module单独出来,所以需要使用发 ...

  6. Java常见的乱码解决方式

    JAVA几种常见的编码格式(转)   简介 编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多.本文将向你详细介绍 Java 中编码 ...

  7. TCP/IP知识总结(TCP/IP协议族读书笔记三)

    接下来,总结传输层的两大协议UDP和TCP. 一.UDP(用户数据报协议) 讲UDP之间,先了解两个概念:有连接和无连接. 有连接:通信之前,通信双方必须建立一条通道: 无连接:不需要建立通道,发送方 ...

  8. C# 获取textbox行数

    当textbox为多行时,获取它的行数:int count = this.txtMsgInfo.Lines.GetUpperBound(0);

  9. Consul Session

    consul馆提供session机制,可用于构建分布式锁. session作为节点,健康检查和key/value数据之间的绑定层. 它们旨在提供粒度锁定,并受到“The Chubby Lock Ser ...

  10. The Hard Thing About Hard Things

    1.大多数的管理书籍都是告诉你如何做正确的事,不把事情搞砸.而好书是告诉你,当事情已经搞砸时,你该怎么办. 2.这是个个真实的世界,他们偷走了你的梦想,可你却不知道是谁偷的.