Mike is the president of country What-The-Fatherland. There are n bears living in this country besides Mike. All of them are standing
in a line and they are numbered from 1 to n from
left to right. i-th bear is exactly ai feet
high.

A group of bears is a non-empty contiguous segment of the line. The size of a group is the number of bears in that group. The strengthof
a group is the minimum height of the bear in that group.

Mike is a curious to know for each x such that 1 ≤ x ≤ n the
maximum strength among all groups of size x.

Input

The first line of input contains integer n (1 ≤ n ≤ 2 × 105),
the number of bears.

The second line contains n integers separated by space, a1, a2, ..., an (1 ≤ ai ≤ 109),
heights of bears.

Output

Print n integers in one line. For each x from 1 to n,
print the maximum strength among all groups of size x.

Sample test(s)
input
10
1 2 3 4 5 4 3 2 1 6
output
6 4 4 3 3 2 2 1 1 1 

题意:
给出n个数,这n个数在区间长度为i(1~n)的时候能够切割成一些区间。这每一个区间都会有一个最小值。在相同长度的这些区间的最小值中,输出最大值

思路:
使用单调栈,保持栈内的数的单调递增性

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <math.h>
#include <bitset>
#include <algorithm>
#include <climits>
using namespace std; #define LS 2*i
#define RS 2*i+1
#define UP(i,x,y) for(i=x;i<=y;i++)
#define DOWN(i,x,y) for(i=x;i>=y;i--)
#define MEM(a,x) memset(a,x,sizeof(a))
#define W(a) while(a)
#define gcd(a,b) __gcd(a,b)
#define LL long long
#define N 200005
#define MOD 1000000007
#define INF 0x3f3f3f3f
#define EXP 1e-8
#define lowbit(x) (x&-x) /*
num栈顶的元素,width宽度,跟如今入栈的数之间相隔了多少个数,由于要求的是连续区间。所以这个也是必须记录的
*/
struct node
{
int num,width;
node() {};
node(int _num,int _width):num(_num),width(_width) {}
}; stack<node> S;
int a[N],ans[N]; int main()
{
int n,i,j;
scanf("%d",&n);
for(i = 0; i<n; i++)
scanf("%d",&a[i]);
a[n++] = 0;
MEM(ans,0);
for(i = 0; i<n; i++)
{
int len = 0;//连续区间的长度
node k;
while(!S.empty())
{
k = S.top();
if(k.num<a[i])
break;
//新入栈的元素比栈顶元素要小,那么对于这个连续区间而言,这个比新入栈的元素就没实用了,能够出栈
int ls=k.width+len;//出栈的同一时候获得其长度
if(k.num>ans[ls])//ans记录ls区间的时候的最大值
{
ans[ls]=k.num;
}
len+=k.width;
S.pop();
}
S.push(node(a[i],len+1));
}
for(i = n-1; i>=1; i--)//由于上面仅仅更新了一部分的点,所以如今要对那些没有更新的点也更新
ans[i]=max(ans[i],ans[i+1]);
printf("%d",ans[1]);
for(i = 2; i<n; i++)
printf(" %d",ans[i]);
printf("\n"); return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

Codeforces548D:Mike and Feet(单调栈)的更多相关文章

  1. Codeforces Round #305 (Div. 1) B. Mike and Feet 单调栈

    B. Mike and Feet Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/547/pro ...

  2. codeforces 547B. Mike and Feet 单调栈

    题目链接 用单调栈计算出一个数字, 左边第一个比他小的数字的位置, 右边比第一个他小的数字的位置, 然后len = r[i] - l[i] +1. ans[len] = max(ans[len], a ...

  3. Codeforces Round #305 (Div. 2) D. Mike and Feet 单调栈

    D. Mike and Feet time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  4. Codeforces 547B. Mike and Feet[单调栈/队列]

    这道题用单调递增的单调栈维护每个数能够覆盖的最大区间即可. 对于   1 2 3 4 5 4 3 2 1 6 这组样例, 1能够覆盖的最大区间是10,2能够覆盖的最大区间是7,以此类推,我们可以使用单 ...

  5. CF Mike and Feet (求连续区间内长度为i的最小值)单调栈

    Mike and Feet time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  6. Mike and Feet CodeForces - 548D (单调栈)

    Mike is the president of country What-The-Fatherland. There are n bears living in this country besid ...

  7. Codeforces Round #305 (Div. 2)D. Mike and Feet(单调栈)

    题意 n个值代表n个熊的高度 对于size为x的group strength值为这个group(连续的几个熊)中熊的最小的height值 对于x(1<=x<=n) 求出最大的strengt ...

  8. CodeForces 548D 单调栈

    Mike and Feet Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Subm ...

  9. Mike and Feet(CF 547B)

    Mike and Feet time limit per test 1 second memory limit per test 256 megabytes input standard input ...

随机推荐

  1. asp.net访问网络路径方法(模拟用户登录)

    public class IdentityScope : IDisposable { // obtains user token [DllImport("advapi32.dll" ...

  2. iOS英语—》中国本土化,如调用专辑,摄像头的变化“cancel”,“photos”至“撤消”,“摄像头”

    呼叫系统相册.系统相簿界面后标题显示"photos",可是手机语言已经设置显示中文,纠结半天,终于在info.plist设置解决这个问题. 仅仅须要改三个地方: 1.plist文件 ...

  3. yum简介(转)

    yum是什么yum = Yellow dog Updater, Modified 主要功能是更方便的添加/删除/更新RPM包. 它能自动解决包的倚赖性问题. 它能便于管理大量系统的更新问题yum特点可 ...

  4. android登陆接口调试

    最近项目要开始调API,于是自己写了个关于登陆界面调试的Demo,为了保护项目,接口文档里面的内容都是被我改过的,不涉及任何项目内容.当然,代码在运行成功后,上传至博客前,相应内容我也根据改过后的文档 ...

  5. Caused by: org.springframework.beans.factory.BeanCreationException

    1.错误原因 2014-7-13 17:36:57 org.apache.jasper.compiler.TldLocationsCache tldScanJar 信息: At least one J ...

  6. 全栈JavaScript之路(十七)HTML5 新增字符集属性

    HTML5 添加�了几个文档字符集属性. document.charset : 表示文档的实际使用的字符集. document.defaultCharset: 表示默认的字符集,跟浏览器以及操作系统设 ...

  7. Unity3D-RPG项目实战(1):发动机的特殊文件夹

    前言 从8月份開始.下定决心正式開始学习Unit3D啦.尽管自己写过两代端游引擎,被应用的项目也超过10个,Unreal Engine也搞过几年,只是做手游.哥确实还是个新手.Unity3D这个引擎我 ...

  8. 日积月累:weightSum和layout_weight属性合用

    解说一:weightSum和layout_weight属性合用 android:weightSum属性:定义weight总和的最大值. 假设为指定该值,全部子视图的layout_weight属性的累加 ...

  9. mybatis以序列周期,同样处理的这个问题的价值

    原因猜测缓存,由于代码是肯定没问题,但无论怎么查都一样值 <select id="querySeq" resultType="java.lang.Long" ...

  10. 第十六章——处理锁、阻塞和死锁(3)——使用SQLServer Profiler侦测死锁

    原文:第十六章--处理锁.阻塞和死锁(3)--使用SQLServer Profiler侦测死锁 前言: 作为DBA,可能经常会遇到有同事或者客户反映经常发生死锁,影响了系统的使用.此时,你需要尽快侦测 ...