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> ...
随机推荐
- [Everyday Mathematics]20150206
$$\bex \sen{fg}_{L^1}\leq C\sen{f}_{L^{r,\al}}\sen{g}_{L^{r',\al'}}, \eex$$ 其中 $$\bex f\in L^{r,\al} ...
- HDU5772 String problem 最大权闭合图+巧妙建图
题意:自己看吧(不是很好说) 分析: 网络流:最大权闭合子图. 思路如下: 首先将点分为3类 第一类:Pij 表示第i个点和第j个点组合的点,那么Pij的权值等于w[i][j]+w[j][i](表示得 ...
- Selenium - IDE模式匹配
Selenium - IDE模式匹配 在Selenium IDE中,如定位器,模式是selenium中经常使用的一种类型的参数.它允许用户描述特殊字符的模式.很多时候,我们想核实文字是动态的,在这种情 ...
- 利用Spring.Net技术打造可切换的分布式缓存读写类
利用Spring.Net技术打造可切换的Memcached分布式缓存读写类 Memcached是一个高性能的分布式内存对象缓存系统,因为工作在内存,读写速率比数据库高的不是一般的多,和Radis一样具 ...
- 用VMware 8安装Ubuntu 12.04详细过程(图解)
转载 http://www.cnblogs.com/achillesyang/archive/2012/06/21/2557152.html
- [HIve - LanguageManual] Subqueries
Subqueries in the FROM Clause Subqueries in the WHERE Clause Subqueries in the FROM Clause SELECT .. ...
- The solution to Force.Com IDE 29.0 PassWord Problem
我最近使用Force.com IDE 时,经常提示密码错误.从Google 中终于发现一个解决方法,分享给大家,以供大家参考. 在Force.com IDE 29.0中,IDE 存储我们开发Org ...
- Uva 208 - Firetruck
[题目链接]http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&p ...
- 在Windows Server 下安装 Oracle 11G 的一般步骤
- POJ2763-Housewife Wind(树链剖分)
也是入门题,和上一题不一样的是权值在边上. 调了半天后来发现线段树写错了,build的时候没有pushup...蠢哭了好吗.... 做题还是不专心,太慢辣.. #include <algorit ...