二维图中找最大子矩形的四道题

本文探讨了二维图中找最大子矩形的四道题目,包括hdu 1506和2830。解题思路涉及将矩形高度转化为基线,并利用动态规划求解最大矩形,同时处理图中列的交换情况以找到由1组成的最大矩形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hdu 1506 直方图中找最大矩形

找出每个矩形以自己的高能延伸到的左右边界

#include<stdio.h>
#include<string.h>
#define maxn 100010
int n;
__int64 max;
struct node{
    int left,right;
    __int64 num;
}t[maxn];
int main()
{
    int i,j,k,l;
    while(scanf("%d",&n)&&n!=0)
    {
        max=-1;
        for(i=0;i<n;i++)
        {
            scanf("%I64d",&t[i+1].num);
            t[i+1].left=t[i+1].right=i+1;
        }
        t[0].num=-1;
        t[n+1].num=-1;
        for(i=1;i<=n;i++)
        {
            while(t[i].num<=t[ t[i].left-1 ].num)
                t[i].left=t[ t[i].left -1 ].left;
        }
        for(i=n;i>=1;i--)
        {
            while(t[i].num<=t[ t[i].right+1 ].num)
                t[i].right=t[ t[i].right+1 ].right;
        }
        for(i=1;i<=n;i++)
        {
            __int64 tm
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值