zoukankan      html  css  js  c++  java
  • POJ2559 最大矩形面积

    POJ2559 最大矩形面积

    题意

    给定从左到右多个矩形,已知这此矩形的宽度都为1,长度不完全相等。这些矩形相连排成一排,求在这些矩形包括的范围内能得到的面积最大的矩形,打印出该面积。所求矩形可以横跨多个矩形,但不能超出原有矩形所确定的范围。

    输入格式

    第一行一个数

    第二行有 个整数,分别表示每个建筑物高度 。

    输出格式

    一个整数,表示海报的最大面积。

    样例

    样例输入

    6
    5 8 4 4 8 4
    

    样例输出

    24
    

    思路

    用一个单调递增栈记录每个矩形向右延伸的最大距离, 比如样例:

    1.拿到一个ai, 判断他是否大于栈顶,是则直接入栈, 否则把比他大的元素全部出栈, 以维持单调性.出栈元素的个数即为延伸长度.

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int a[1000010], b[1000010], pos[1000010], top, ans, n;
    signed main(){
        scanf("%d", &n);
        for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
        for(int i = 1; i <= n + 1 ;i++){
            if(a[i] > b[top]) b[++top] = a[i], pos[top] = 1;//大于栈顶元素,直接入栈
            else {//小于栈顶元素 
                int len = 0;//延伸长度 
                while(b[top] > a[i]){//维持栈的单调性
                    len += pos[top];//记录延伸长度, 最终得到的值相当于下标做差
                    ans = max(ans, len * b[top]);//面积=延伸的长度*这段长度内最低矩形的高度
                    top--;
                }
                b[++top] = a[i];
                pos[top] = len + 1;//pos[top]表示top向后延伸的最大长度
            }
        }
        printf("%d
    ", ans);
        return 0;
    }
    
  • 相关阅读:
    IO模型
    opencv操作(二)
    Opencv基于python的基本操作(一)
    Django路由层与视图层、pycharm虚拟环境
    Django实现简单的用户添加、删除、修改等功能
    初识Django
    前端框架Bootstrap
    JQuery
    JavaScript之BOM和DOM
    JavaScript学习笔记
  • 原文地址:https://www.cnblogs.com/hzoi-poozhai/p/12838958.html
Copyright © 2011-2022 走看看