码迷,mamicode.com
首页 > 编程语言 > 详细

201312-3(O(n)算法)

时间:2020-09-24 21:38:31      阅读:46      评论:0      收藏:0      [点我收藏+]

标签:计算   pop   names   ||   mes   元素   pac   算法   删掉   

#include <bits/stdc++.h>
using namespace std;
//不是递增的话就删掉,然后重新计算一次 
int getMaxArea(vector<int> &vec)
{
    stack<int> s;
    int max_area = 0;
    int i=0;
    int tp,area_with_top;
    while(i < vec.size()){
        if(s.empty() || vec[s.top()] <= vec[i])//栈是空的时候,或者栈顶元素小于当前vector所出的元素 
        s.push(i++);
        else
        {
            tp = s.top();
            s.pop();
            area_with_top = vec[tp]*(s.empty()? i:i-s.top()-1);
            max_area = max(max_area,area_with_top);
        }
    }
    while(!s.empty())
    {
        tp = s.top();
        s.pop();
        area_with_top = vec[tp] * (s.empty() ? i : i-s.top()-1);
        max_area = max(max_area, area_with_top);
    }
    return max_area;
}
int main(){
    int N;
    vector<int> vec;
    cin>>N;
    for(int i=0;i<N;++i)
    {
        int val;
        cin>>val;
        vec.emplace_back(val);
    }
    cout << getMaxArea(vec);
    return 0;
} 

 

201312-3(O(n)算法)

标签:计算   pop   names   ||   mes   元素   pac   算法   删掉   

原文地址:https://www.cnblogs.com/zmachine/p/13721609.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!