BZOJ : [Usaco2013 Nov]Crowded 单调队列
正反两遍个来一次单调队列 DP 即可.
Code:
#include<cstdio>
#include<deque>
#include<algorithm>
using namespace std;
const int maxn = 50000+3;
int mark[maxn];
struct Node{
long long pos,height;
Node(long long pos=0,long long height=0):pos(pos),height(height){}
bool operator<(Node b)const{
if(b.pos == pos)return height > b.height;
return pos<b.pos;
}
}A[maxn];
deque<Node>Q;
int main(){
// freopen("in.txt","r",stdin);
int n;
long long d;
scanf("%d%lld",&n,&d);
for(int i =1;i<=n;++i)
{
long long a,b;
scanf("%lld%lld",&a,&b);
A[i]=Node(a,b);
}
sort(A+1,A+1+n);
int cnt = 0;
for(int i = 1;i <= n; ++i)
{
long long cur_pos = A[i].pos-d;
long long cur_height = A[i].height; while(!Q.empty()&&Q.front().pos < cur_pos)Q.pop_front(); while(!Q.empty()&&Q.back().height <= cur_height)Q.pop_back();
Q.push_back(A[i]);
if(Q.front().height >= A[i].height*2)mark[i] = 1;
}
while(!Q.empty())Q.pop_back();
for(int i =n;i>=1;--i){
long long cur_pos = A[i].pos + d;
long long cur_height = A[i].height;
while(!Q.empty()&&Q.front().pos > cur_pos)Q.pop_front(); while(!Q.empty()&&Q.back().height <= cur_height)Q.pop_back();
Q.push_back(A[i]);
if(Q.front().height >= A[i].height*2&&mark[i])++cnt;
}
printf("%d",cnt);
return 0;
}
BZOJ : [Usaco2013 Nov]Crowded 单调队列的更多相关文章
- BZOJ 3314: [Usaco2013 Nov]Crowded Cows( 单调队列 )
从左到右扫一遍, 维护一个单调不递减队列. 然后再从右往左重复一遍然后就可以统计答案了. ------------------------------------------------------- ...
- BZOJ3314: [Usaco2013 Nov]Crowded Cows
3314: [Usaco2013 Nov]Crowded Cows Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 86 Solved: 61[Subm ...
- 3314: [Usaco2013 Nov]Crowded Cows
3314: [Usaco2013 Nov]Crowded Cows Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 111 Solved: 79[Sub ...
- BZOJ 3314 [Usaco2013 Nov]Crowded Cows:单调队列
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3314 题意: N头牛在一个坐标轴上,每头牛有个高度.现给出一个距离值D. 如果某头牛在它的 ...
- 【BZOJ3314】 [Usaco2013 Nov]Crowded Cows 单调队列
第一次写单调队列太垃圾... 左右各扫一遍即可. #include <iostream> #include <cstdio> #include <cstring> ...
- bzoj 3126: [Usaco2013 Open]Photo——单调队列优化dp
Description 给你一个n长度的数轴和m个区间,每个区间里有且仅有一个点,问能有多少个点 Input * Line 1: Two integers N and M. * Lines 2..M+ ...
- BZOJ 3126 [USACO2013 Open]Photo (单调队列优化DP)
洛谷传送门 题目大意:给你一个长度为$n$的序列和$m$个区间,每个区间内有且仅有一个1,其它数必须是0,求整个序列中数字1最多的数量 神题,竟然是$DP$ 定义$f_{i}$表示第i位放一个1时,最 ...
- bzoj3126[Usaco2013 Open]Photo 单调队列优化dp
3126: [Usaco2013 Open]Photo Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 374 Solved: 188[Submit] ...
- BZOJ 1047 二维单调队列
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 题意:见中文题面 思路:该题是求二维的子矩阵的最大值与最小值的差值尽量小.所以可以考 ...
随机推荐
- [bzoj3037/2068]创世纪[Poi2004]SZP_树形dp_并查集_基环树
创世纪 SZP bzoj-3037/2068 Poi-2004 题目大意:给你n个物品,每个物品可以且仅可以控制一个物品.问:选取一些物品,使得对于任意的一个被选取的物品来讲,都存在一个没有被选取的物 ...
- .NET Web API - 去掉讨厌的$id并且强制返回json格式
// 只返回json字符串,屏蔽自动选择xml格式的可能性,同时去掉讨厌的$id var json = config.Formatters.JsonFormatter; json.Serializer ...
- js判断object的具体类型(或者说判断object的类class)
The JavaScript specification gives exactly one proper way to determine the class of an object: Objec ...
- 2014 北京 DevFest 大会能够报名啦,小伙伴们还在等什么
一年一度的大型开发人员活动,2014 北京 DevFest 大会站点正式上线: http://devfest.gdgbeijing.org/. 还等什么,開始报名了! 今年 DevFest 大会将再次 ...
- 极光推送案例-PushExample-Jpush
ssh - maven - java项目-极光注冊id完毕推送 这是我学习时的步骤: 1:去极光推送平台注冊账号,自己能够去注冊(一般公司会帮助完毕注冊) 地址:https://www.jpush.c ...
- swift 雨燕 新手教程
Apple Swift编程语言新手教程 chox 2014-06-03 文件夹 简单介绍 入门 简单值 控制流 函数与闭包 对象与类 枚举与结构 1 简单介绍 今天凌晨Apple刚刚公布了Swif ...
- android 细节之 menu 之 invalidateOptionsMenu
menu 在 android中是个很经常使用的控件,曾经自己做项目的时候通常都是将系统的menu相关方法在activity中直接删去.而且将主题换为fullscreen,然后再在layout中引入自己 ...
- mongoDB学习笔记——在C#中查询
1.下载安装 想要在C#中使用MongoDB,首先得要有个MongoDB支持的C#版的驱动.C#版的驱动貌似有很多种,如官方提供的samus. 实现思路大都类似.这里我们用官方提供的mongo-csh ...
- 安卓Recovery模式该怎么用?【转】
本文转载自:http://android.baike.com/article-109914.html 安卓系统出了名的刷机刷机再刷机,说起刷机就不能不谈Recovery模式,这项刷机过程中最重要的一到 ...
- tflearn mnist 使用MLP 全连接网络一般都会加dropout哇
# -*- coding: utf-8 -*- """ Deep Neural Network for MNIST dataset classification task ...