Hdu 3410 【单调队列】.cpp
题意:
给出一个数组,问你对于第i个数,从最后一个比它大的数到它之间比它小的数中最大的那个数的下标,以及它右边到第一个比它大的数中比它小的数中最大的那一个数的下标<下标从1开始>。
eg:5 2 4 3 1
l 0 0 2 0 0 对5来说左边比它小的数没有,所以是0。对2来说左边比它小的数没有,所以是0。对4来说左边比它小的数是2,所以下标是2。
r 3 0 4 5 0 对5来说右边比它小的数中最大的是4,是第3个,所以答案是3。对2来说右边比它小的数是1,但是4比2大,所以无法到达1,所以答案是0。对于4,右边比它小的数中最大一个3的下标是4,所以答案是4。
思路:
单调队列。
先从左向右维护一个单调队列,然后在维护过程中最后一个从队列中剔除掉的即右边比它小的数中最大的那一个。
单调队列中的值是下标值。
从右向左再维护一个单调队列就可以求出另一个值。
Tips:
nothing..
Code:
#include <stdio.h>
#include <cstring>
#include <algorithm>
using namespace std; const int MAXN = ; int main()
{
freopen("in.txt", "r", stdin);
int iCase, n, ic = ;
int arr[MAXN], que[MAXN];
int rear, front;
int l[MAXN], r[MAXN];
bool flag;
scanf("%d", &iCase);
while (iCase--) {
arr[] = ;
memset(que, , sizeof(que)); scanf("%d", &n);
for (int i = ; i <= n; ++i)
scanf("%d", &arr[i]); front = , rear = -;
for (int i = ; i <= n; ++i) {
flag = false;
while (front <= rear && arr[que[rear]] < arr[i]) {
flag = true;
rear--;
}
if (flag) l[i] = que[rear+];
else l[i] = ;
que[++rear] = i;
} front = , rear = -;
for (int i = n; i >= ; --i) {
flag = false;
while (front <= rear && arr[que[rear]] < arr[i]) {
flag = true;
rear--;
}
if (flag) r[i] = que[rear+];
else r[i] = ;
que[++rear] = i;
} printf("Case %d:\n", ic++);
for (int i = ; i <= n; ++i) {
printf("%d %d\n", l[i], r[i]);
}
}
return ;
}
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3410
Hdu 3410 【单调队列】.cpp的更多相关文章
- HDU 3507 单调队列 斜率优化
斜率优化的模板题 给出n个数以及M,你可以将这些数划分成几个区间,每个区间的值是里面数的和的平方+M,问所有区间值总和最小是多少. 如果不考虑平方,那么我们显然可以使用队列维护单调性,优化DP的线性方 ...
- hdu 3530 单调队列最值
/** HDU 3530 单调队列的应用 题意: 给定一段序列,求出最长的一段子序列使得该子序列中最大最小只差x满足m<=x<=k. 解题思路: 建立两个单调队列分别递增和递减维护(头尾删 ...
- hdu 3401 单调队列优化DP
Trade Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- hdu 3415 单调队列
Max Sum of Max-K-sub-sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- hdu 3415(单调队列) Max Sum of Max-K-sub-sequence
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=3415 大意是给出一个有n个数字的环状序列,让你求一个和最大的连续子序列.这个连续子序列的长度小于等于k. ...
- hdu 3401 单调队列优化+dp
http://acm.hdu.edu.cn/showproblem.php?pid=3401 Trade Time Limit: 2000/1000 MS (Java/Others) Memor ...
- HDU 2191 - 单调队列优化多重背包
题目: 传送门呀传送门~ Problem Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种 ...
- HDU 3530 单调队列
题目大意:给你n个数, 让你问你最长的满足要求的区间有多长,区间要求:MAX - MIN >= m && MAX - MIN <= k 思路:单调队列维护递增和递减,在加入 ...
- HDU 4122 单调队列
转载自:http://blog.csdn.net/lvshubao1314/article/details/46910271 DES :给出n个订单和m是商店的开放时间.然后n行给出n个订单的信息.然 ...
- HDU 3530Subsequence(单调队列)
题意 题目链接 给出$n$个数,找出最长的区间,使得区间中最大数$-$最小数 $>= m$ 且$<= k$ Sol 考虑维护两个单调队列. 一个维护$1 - i$的最大值,一个维护$1 - ...
随机推荐
- android调用音乐播放器,三种方
小弟想请问一下.怎样在自己写的程序中调用系统的音乐播放器呢. 我在google上搜索了.主要是有两种方法,可是都不是我想要的. 第一种是.使用mp3音乐文件的uri.和intent,进行调用.可是这样 ...
- JS - 6款鼠标悬停效果
下载地址:http://www.lanrentuku.com/js/tupian-1093.html
- POJ 1955 Rubik's Cube
暴力模拟就好了.... vim写代码真费事,手都写酸了... Rubik's Cube Time Limit: 1000MS Memory Limit: 30000K Total Submissi ...
- Codeforces Round #218 (Div. 2) (线段树区间处理)
A,B大水题,不过B题逗比了题意没理解清楚,讲的太不清楚了感觉= =还是英语弱,白白错了两发. C: 二分答案判断是否可行,也逗比了下...二分的上界开太大导致爆long long了... D: ...
- 136 - Ugly Numbers
Ugly Numbers Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3 ...
- Lambda高手之路第三部分
转http://www.cnblogs.com/lazycoding/archive/2013/01/06/2847587.html 背后的秘密-MSIL 通过著名的LINQPad,我们可以更深入的查 ...
- 禁用掉用户帐号,用户Lync客户端仍然可以登录!
问题: 有这样的一个情况,一位具有LYNC权限的用户离职了,AD账号已经禁用.LYNC和邮箱功能暂时保留.可用户离职4天了,还能够正常登录到LYNC,能够正常发送和接收即时消息.我经过测试,确实AD账 ...
- AFNetworking2.0后 进行Post请求
本文以新浪微博的Oauth认证为样例进行Post请求的演示 以下直接上代码: #import "ViewController.h" #import "AFNetworki ...
- Java Swing界面编程(31)---菜单条:JMenu
package com.beyole.test; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMe ...
- Android实战简易教程-第九枪(BitmapFactory.Options对资源图片进行缩放)
我们知道,我们编写的应用程序都是有一定内存限制的.程序占用了过高的内存就easy出现OOM(OutOfMemory)异常.因此在展示高分辨率图片的时候,最好先将图片进行压缩,压缩后的图片大小应该和用来 ...