题意:

  给出一个数组,问你对于第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

最新文章

  1. SpringMVC(五) RequestMapping 请求参数和请求头
  2. 关于dll的一点收获
  3. 微信企业号api调用频率
  4. Windows下Faster-RCNN的使用
  5. IOS 二维码生成
  6. 【转载】C语言中的undefined behavior/unspecified behavior - 序
  7. Ackerman函数
  8. [转]基于SQL脚本将数据库表及字段提取为C#中的类
  9. Js Pattern - Self Define Function
  10. html元素类型 块级元素、内联元素(又叫行内元素)和内联块级元素。
  11. poj3278Catch That Cow(BFS)
  12. 【Java每日一题】20170110
  13. (NO.00003)iOS游戏简单的机器人投射游戏成形记(十九)
  14. myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法)
  15. Cocos Creator的类别
  16. 统计cpu相关信息
  17. 解题5(StringMerge1)
  18. ASP.NET MVC异常处理方案
  19. javaScript高级教程(九) ------javascript对象字面量--------困扰已久的问题
  20. BZOJ 2004 公交线路(状压DP+矩阵快速幂)

热门文章

  1. checkbox之checked的方法(attr和prop)区别
  2. Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)
  3. 用python将SQL格式文件改成自己想要的格式
  4. 转换函数CONVERSION_EXIT_TSTRN_OUTPUT
  5. No matching code signing identity found
  6. 【iOS开发-31】UITabBar背景、icon图标颜色、被选中背景设置以及隐藏UITabBar的两种方式
  7. 积累的VC编程小技巧之图标、光标及位图
  8. MySQL内存表的特性与使用介绍 -- 简明现代魔法
  9. 马航MH17事件将把普京逼入绝境?
  10. Windbg 32位版本和64位版本的选择