HDU 3410 && POJ 3776 Passing the Message 单调队列
题意:
给定n长的数组(下标从1-n)(n个人的身高,身高各不同样
问:对于第i个人,他能看到的左边最矮的人下标。(假设这个最矮的人被挡住了,则这个值为0)
还有右边最高的人下标,同理若被挡住了则这个值为0
输出n行,每一个人左右2边的下标。
单调队列,对于 front - rear 的队列(注意出队都是在rear,入队也是在rear)
当增加元素x,若这队列是单调递增的,显然q.front() <= x , 反之若>x ,则把队首元素弹掉,这样就能保持单调性。
若弹掉了队首元素,在此题中就相当于最矮的人被挡住了,由于{q.end() < q.front() }> x。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
using namespace std;
#define N 50010
int l[N], r[N];
int a[N],n;
int L,R;
int q[N*2];
int pos[N];
void init(){ L=1;R=0; } void work1(){
init();
for(int i = 1; i <= n; i++){
bool fa = false;
while(L<=R && q[R]<a[i])R--, fa = true; if(fa) l[i] = pos[q[R+1]];
else l[i] = 0;
q[++R] = a[i];
}
}
void work2(){
init();
for(int i = n; i; i--){
bool fa = false;
while(L<=R && q[R]<a[i])R--, fa = true;
if(fa) r[i] = pos[q[R+1]];
else r[i] = 0;
q[++R] = a[i];
}
}
map<int,int>mp;
int Stack[N];
int main(){
int i,j ,u, v, T, Cas = 1;
scanf("%d",&T);
while(T--){
mp.clear();
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
work1();
work2();
printf("Case %d:\n",Cas++);
for(int i = 1;i <=n; i++)printf("%d %d\n",l[i],r[i]);
}
return 0;
}
HDU 3410 && POJ 3776 Passing the Message 单调队列的更多相关文章
- hdu 3410 Passing the Message(单调队列)
题目链接:hdu 3410 Passing the Message 题意: 说那么多,其实就是对于每个a[i],让你找他的从左边(右边)开始找a[j]<a[i]并且a[j]=max(a[j])( ...
- POJ 2823 Sliding Window 【单调队列】
题目链接:http://poj.org/problem?id=2823 题目大意:给出一组数,一个固定大小的窗体在这个数组上滑动,要求出每次滑动该窗体内的最大值和最小值. 这就是典型的单调队列,单调队 ...
- HDU 4193 Non-negative Partial Sums(想法题,单调队列)
HDU 4193 题意:给n个数字组成的序列(n <= 10^6).求该序列的循环同构序列中,有多少个序列的随意前i项和均大于或等于0. 思路: 这题看到数据规模认为仅仅能用最多O(nlogn) ...
- POJ 2823 Sliding Window(单调队列入门题)
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 67218 Accepted: 190 ...
- HDU 4123 Bob's Race:树的直径 + 单调队列 + st表
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4123 题意: 给你一棵树,n个节点,每条边有长度. 然后有m个询问,每个询问给定一个q值. 设dis[ ...
- poj 3250 Bad Hair Day(单调队列)
题目链接:http://poj.org/problem?id=3250 思路分析:题目要求求每头牛看见的牛的数量之和,即求每头牛被看见的次数和:现在要求如何求出每头牛被看见的次数? 考虑到对于某头特定 ...
- Passing the Message 单调栈两次
What a sunny day! Let’s go picnic and have barbecue! Today, all kids in “Sun Flower” kindergarten ar ...
- HDU 5945 / BestCoder Round #89 1002 Fxx and game 单调队列优化DP
Fxx and game 问题描述 青年理论计算机科学家Fxx给的学生设计了一款数字游戏. 一开始你将会得到一个数\:XX,每次游戏将给定两个参数\:k,tk,t, 任意时刻你可以对你的数执行下面 ...
- poj 2823 Sliding Window(单调队列)
/* 裸地单调队列.. 第一次写 写的好丑.... */ #include<iostream> #include<cstdio> #include<cstring> ...
随机推荐
- mount
产品,平台,RS6000, pseries 软件版本, aix 当NFS在NFS客户端加载时,系统会问是使用 soft-mount 还是hard-mount, 它们之间有什么区别? 它们的区别在于当发 ...
- ASP.NET MVC+Bootstrap个人博客之后台dataTable数据列表(五)
jQuery dataTables 插件是一个优秀的表格插件,是后台工程师的福音!它提供了针对数据表格的排序.浏览器分页.服务器分页.查询.格式化等功能.dataTables 官网也提供了大量的演示 ...
- hdu1792 水题
最近转到vim上来了,用vim编写代码,用gcc编译,用gdb调试.这是用vim做的第一道题,纪念下.题目很水,就不说了. /* * Author : ben */ #include <cstd ...
- LINQ to SQL语句之Join和Order By
Join操作 适用场景:在我们表关系中有一对一关系,一对多关系,多对多关系等.对各个表之间的关系,就用这些实现对多个表的操作. 说明:在Join操作中,分别为Join(Join查询), SelectM ...
- sublime text2中ctags安装问题的解决
其实按照http://blog.csdn.net/xiao_qiang_/article/details/9074557基本可以安装好,不过我还是遇到了问题.说一下我如何解决在MAC上安装时的奇葩问题 ...
- 开通GitHub以及使用笔记
把小游戏的代码和博客迁移到GitHub上,路径是:https://github.com/GAMTEQ,欢迎访问 以下是使用GITHUB的一些命令 504 cd code 506 mkdir Fai ...
- 去除下载电影和电视剧文件名中的多余字符[python实现]
讨厌下载电影和电视剧文件名中的多余字符(如网址和广告字样),,搞得文件名好长,可以使用下面的Python代码,自行修改即可. #!\usr\bin\env python # -*- coding: u ...
- JSON2 源代码
/* json2.js 2014-02-04 Public Domain. NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. See ht ...
- sys.check_constraints
每个用作 CHECK 约束(sys.objects.type = C)的对象都在表中占一行. SELECT name FROM sys.check_constraints -- equal to SE ...
- SQL Server 跨库连接
-- 开启组件 reconfigure reconfigure -- 关闭组件 reconfigure reconfigure -- 查询远程数据库 SELECT * FROM OPENDATASOU ...