zoukankan      html  css  js  c++  java
  • 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 input
    output
    standard output

    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 strength of 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.

    Examples
    input
    10
    1 2 3 4 5 4 3 2 1 6
    output
    6 4 4 3 3 2 2 1 1 1 
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<string>
    #include<queue>
    #include<algorithm>
    #include<stack>
    #include<cstring>
    #include<vector>
    #include<list>
    #include<set>
    #include<map>
    using namespace std;
    #define ll long long
    #define pi (4*atan(1.0))
    #define eps 1e-14
    #define bug(x)  cout<<"bug"<<x<<endl;
    const int N=2e5+10,M=1e6+10,inf=2147483647;
    const ll INF=1e18+10,mod=1e9+7;
    ///   数组大小
    int a[N],ans[N];
    int l[N],r[N],s[N];
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        int st=0;
        s[++st]=0;
        for(int i=1;i<=n;i++)
        {
            while(a[s[st]]>=a[i])st--;
            l[i]=s[st];
            s[++st]=i;
        }
        st=0;
        s[++st]=n+1;
        for(int i=n;i>=1;i--)
        {
            while(a[s[st]]>=a[i])st--;
            r[i]=s[st];
            s[++st]=i;
        }
        for(int i=1;i<=n;i++)
        {
            int len=r[i]-l[i]-1;
            ans[len]=max(ans[len],a[i]);
        }
        for(int i=n;i>=1;i--)
            ans[i]=max(ans[i],ans[i+1]);
        for(int i=1;i<=n;i++)
            printf("%d ",ans[i]);
        return 0;
    }
  • 相关阅读:
    《大道至简》第一章读后感,java伪代码形式
    chm文件内容无法显示的问题
    Windows下.py文件右键菜单的增删
    在ArchLinux中安装VMWare Workstation
    笔记本屏幕锁定
    pacman 日志摘要
    数据库事务特性和隔离级别
    数据库范式以及ER图
    《剑指offer》算法题第四天
    《剑指offer》算法题第二天
  • 原文地址:https://www.cnblogs.com/jhz033/p/6661605.html
Copyright © 2011-2022 走看看