拥挤的奶牛题解---队列优化DP---DD(XYX)的博客
拥挤的奶牛
时间限制: 1 Sec 内存限制: 128 MB
题目描述
FJ的n头奶牛(1<=n<=50000)在被放养在一维的牧场。第i头奶牛站在位置x(i),并且x(i)处有一个高度值h(i)
(1<=x(i),h(i)<=1000000000)。
一头奶牛感觉到拥挤当且仅当它的左右两端都有一头奶牛所在的高度至少是它的2倍,且和它的距离最多为D。尽管感到拥挤的奶牛会产生更少的牛奶,FJ还是想知道一共有多上感到拥挤的奶牛。请你帮助他。
输入
第一行:两个整数n和D。
第二行到第n+1行:每一行有两个数表示x(i)和h(i)。
输出
一个数k表示感到拥挤的奶牛的数量。
方法
这道题确实烧脑,因为它没办法用单调队列去存。 假设 i 大于队末元素 j ,则在普通的下降单调队列中, j 就因该被计算并且出队,但是若 i 并不大于等于 2 * j ,就不能计算 j 。若此时把 i 直接入队,就缺乏单调性,不方便计算了。
既然此题数据过大,需要优化,却又不能用单调队列/栈的话,能不能只利用它 O(2n) 的优点,采用更灵活的结构呢?
我的想法是,先按照位置排序,然后用一个优先队列,令 (node)a < b 为 a.h < b.h,用小根堆优化。跟单调队列差不多。每次有元素 x 入堆,就先把堆顶(最矮的那些)身高不超过 的奶牛计算了,如果有与 x 的距离超过 D 的,就直接出堆,然后再把 x 入堆。计算两遍,一次计算右边有无拥挤,一次计算左边。
这样一来,每个元素仍然只有 入堆,出堆 两种计算,时间复杂度也还是 n 的常数倍!
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
void read(int &x) {
int f = 1;x = 0;char s = getchar();
while(s < '0' || s > '9') {if(s == '-')f = -1;s = getchar();}
while(s >= '0' && s <= '9') {x = x * 10 + s - '0';s = getchar();}
x *= f;
}
struct no{
int id,x,h;
}a[50005];
bool operator < (no a,no b) {
return a.h < b.h;
}
bool operator > (no a,no b) {
return b < a;
}
int n,m,s,o,i,j,k;
bool l[50005],r[50005];
priority_queue<no,vector<no>,greater<no> > b;
bool cmp(no a,no b) {
return a.x < b.x;
}
int main() {
read(n);read(m);
for(i = 1;i <= n;i ++) {
read(a[i].x);read(a[i].h);
a[i].id = i;
}
sort(a + 1,a + 1 + n,cmp);
b.push(a[1]);
for(i = 2;i <= n;i ++) {
while(!b.empty() && a[i].h >= b.top().h * 2) {
if(a[i].x - b.top().x <= m) {
r[b.top().id] = 1;
}
b.pop();
}
b.push(a[i]);
}
while(!b.empty()) b.pop();
b.push(a[n]);
for(i = n - 1;i > 0;i --) {
while(!b.empty() && a[i].h >= b.top().h * 2) {
if(b.top().x - a[i].x <= m) {
l[b.top().id] = 1;
}
b.pop();
}
b.push(a[i]);
}
for(i = 1;i <= n;i ++) {
if(l[i] && r[i]) k ++;
}
printf("%d",k);
return 0;
}
拥挤的奶牛题解---队列优化DP---DD(XYX)的博客的更多相关文章
- 圆形谷仓Circular Barn_Silver---(DP优化 / )队列 + 贪心(复杂度O(2n))---DD(XYX)的博客
目录 小数据 大数据 小数据 题目描述 农夫约翰有一个圆形的谷仓,谷仓分成了环形的n(3≤n≤1000)个房间,编号为1 , 2 , -- .每个房间有三个门,两个门通往两个相邻的房间,第三个门朝外. ...
- (四连测)滑雪场的高度差题解---二分 + 搜索---DD(XYX)的博客
滑雪场的高度差 时间限制: 1 Sec 内存限制: 128 MB 题目描述 滑雪场可以看成M x N的网格状山地(1 <= M,N <= 500),每个网格是一个近似的平面,具有水平高度 ...
- hdu3401:单调队列优化dp
第一个单调队列优化dp 写了半天,最后初始化搞错了还一直wa.. 题目大意: 炒股,总共 t 天,每天可以买入na[i]股,卖出nb[i]股,价钱分别为pa[i]和pb[i],最大同时拥有p股 且一次 ...
- Parade(单调队列优化dp)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2490 Parade Time Limit: 4000/2000 MS (Java/Others) ...
- [小明打联盟][斜率/单调队列 优化dp][背包]
链接:https://ac.nowcoder.com/acm/problem/14553来源:牛客网 题目描述 小明很喜欢打游戏,现在已知一个新英雄即将推出,他同样拥有四个技能,其中三个小技能的释放时 ...
- 单调队列以及单调队列优化DP
单调队列定义: 其实单调队列就是一种队列内的元素有单调性的队列,因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的. 单调队列的一般应用: 1.维护区间最值 2 ...
- BZOJ 1499 [NOI2005] 瑰丽华尔兹 | 单调队列优化DP
BZOJ 1499 瑰丽华尔兹 | 单调队列优化DP 题意 有一块\(n \times m\)的矩形地面,上面有一些障碍(用'#'表示),其余的是空地(用'.'表示).每时每刻,地面都会向某个方向倾斜 ...
- 单调队列优化dp
洛谷p3800(单调队列优化DP) 题目背景 据说在红雾异变时,博丽灵梦单身前往红魔馆,用十分强硬的手段将事件解决了. 然而当时灵梦在Power达到MAX之前,不具有“上线收点”的能力,所以她想要知道 ...
- bzoj1499: [NOI2005]瑰丽华尔兹&&codevs1748 单调队列优化dp
这道题 网上题解还是很多很好的 强烈推荐黄学长 码风真的好看 神犇传送门 学习学习 算是道单调队列优化dp的裸题吧 #include<cstdio> #include<cstring ...
随机推荐
- EasyExcel-合并单元格
pom版本 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</ ...
- FFT 小记
写在前面 \(Q:\) 为什么会心血来潮去学 FFT \(A:\) 当本蒟蒻还在努力消化凸包时:.所以本蒟蒻也来看一下 等等 摸头警告 .思维已经废了 About FFT FFT( \(Fast\ F ...
- html关键字大全
html标签属性大全 html标签属性大全从网上搜集整理的常用html标签,供朋友们交流学习html用. html标签<marquee> <marquee>...</ma ...
- 程序分析与优化 - 7 静态单赋值(SSA)
本章是系列文章的第七章,终于来到了鼎鼎大名的SSA,SSA是编译器领域最伟大的发明之一,也是影响最广的发明. 本文中的所有内容来自学习DCC888的学习笔记或者自己理解的整理,如需转载请注明出处.周荣 ...
- 21.LVS负载均衡群集-DR群集
LVS负载均衡群集-DR群集 目录 LVS负载均衡群集-DR群集 数据包流向分析 DR模式的特点 LVS-DR中的ARP问题 IP地址冲突 解决办法 路由根据ARP表项,会将新来的请求报文转发给Rea ...
- 19.Tomcat多实例部署及负载均衡、动静分离
Tomcat多实例部署及负载均衡.动静分离 目录 Tomcat多实例部署及负载均衡.动静分离 Tomcat多实例部署 安装jdk 设置jdk环境变量 安装tomcat 配置 tomcat 环境变量 修 ...
- Leetcode 1051. 高度检查器
这题的目的是找出排序后和排序前位置不同的元素的个数 正常通过复制出一个新的数组,然后对比排序后的数组就能做出,但是时间是1ms 然后发现一种基于桶排序来计数的做法 public int heightC ...
- Leetcode----<Re-Space LCCI>
题解如下: /** * 动态规划解法: * dp[i] 表示 0-i的最小不能被识别的字母个数 * 求 dp[k] 如果第K个字母 不能和前面的字母[0-{k-1}]合在一起被识别 那么dp[k] = ...
- Windows 通过本地计算机IP链接Mysql设置
前言 1.Mysql-1130错误:无法远程连接 错误:ERROR 1130: Host '192.168.1.3' is not allowed to connect to thisMySQL se ...
- Multiparty Cardinality Testing for Threshold Private Set-2021:解读
本文记录阅读该论文的笔记. 本文基于阈值加法同态加密方案提出了一个新的允许\(N\)方检查其输入集的交集是否大于\(n-t\)的IPSI方案,该协议的通信复杂度为\(O(Nt^2)\). 注意:\(N ...