zoukankan      html  css  js  c++  java
  • codeforces 547B【单调栈】

    题意:
    有一个长度为n的序列,序列有长度为1...n的连续子序列,
    一个连续子序列里面最小的值称作这个子序列的子序列的strength,
    要求出每种长度的连续子序列的最大的strength。
    思路:
    以当前位置为最小值,向两边延伸。
    那我就能知道这个位置作为最小值时长度。

    具体思路忘了。。。
    给出几组数据希望能有启发?

    /*
    10
    1 2 3 4 5 4 3 2 1 6
    10
    100000 99999 99998 99997 99996 99995 99994 99993 99992 99991
    10
    1 2 3 4 5 6 7 8 9 10
    */
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    typedef pair<int,int> PII;
    const int N=2e5+10;
    struct asd
    {
    	int left,right,w;
    };
    int num[N],n,h[N];
    stack<asd>q;
    int main()
    {
    	asd now,nex;
        int temp,tmp;
    	while(!q.empty())
        	q.pop();
        memset(num,0,sizeof(num));
    	scanf("%d",&n);
        for(int i=1; i<=n; i++)
            scanf("%d",&h[i]);
        num[1]=max(num[1],h[1]);
        now.left=1;
        now.right=1;
        now.w=h[1];
        q.push(now);
        bool flag;
        for(int i=2; i<=n; i++)
        {
            now.left=1;
            now.right=1;
            now.w=h[i];
            while(!q.empty()&&q.top().w>h[i])
            {
                nex=q.top();
                q.pop();
                now.left+=nex.left;
                temp=nex.right+nex.left-1;
                num[temp]=max(num[temp],nex.w);
                if(!q.empty())
                    q.top().right+=nex.right;
            }
            q.push(now);
        }
        flag=false;
        while(!q.empty())
        {
            nex=q.top();
            q.pop();
            temp=nex.right+nex.left-1;
        	num[temp]=max(num[temp],nex.w);
    		if(!q.empty())
            	q.top().right+=nex.right;
        }
        temp=num[n];
        for(int i=n;i>=1;i--)
        {
        	if(num[i]<=temp)
        		num[i]=temp;
        	else
        		temp=num[i];
    	}
    	for(int i=1;i<=n;i++)
    		printf("%d ",num[i]);
        return 0;
    }


  • 相关阅读:
    买房的贷款时间是否是越长越好?https://www.zhihu.com/question/20842791
    asp.net cookie and session
    leelazero and google colab
    download file by python in google colab
    physical processor, core, logical processor
    通过powershell操作eventlog
    openxml in sql server
    get the page name from url
    How to Execute Page_Load() in Page's Base Class?
    Difference between HttpContext.Request and Request
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777408.html
Copyright © 2011-2022 走看看