USACO 6.1.2 A Rectangular Barn 单调栈

Usaco Training Section 6.1 A Rectangular Barn A Rectangular Barn 矩形牛棚 到底是个资本家,Farmer John 想通过买更多的奶牛来扩大它的生意.它需要给奶牛建造一个新的牛棚.FJ 买了一个矩形的R(1 <= R <= 3000)行C(1 <= C <= 3000)列的牧场.不幸的是,他发现某些1 x 1的区域被损坏了,所以它不可能在把整个牧场建造成牛棚了.FJ 数了一下,发现有P(1 <=... 阅读详情

http://train.usaco.org/usacoprob2?S=rectbarn&a=iHzQON4VeJX

题目大意:一个R*C的方格阵,有P个无效格,求不包含无效格的矩形的最大面积


错误想法一:

①对每个位置求出离他最近的左侧无效格到他的距离 ②遍历每个格子,向上伸展直到遇到无效格,在这个过程中计算以该长条为边的矩形的面积

时间复杂度是N^3的,而且需要一个R*C的数组,在这道题里是3000*3000,开不出来


预备知识:

对于一组已知高度的柱状图,求出内部的最大矩形面积

方法:维护一个单调栈,栈中存的每根柱子高度是非递减的,在维护的过程中和维护结束后计算面积:

        在插入当前柱[k]前弹出栈顶柱[i],此时新栈顶[j](j可能为0,此时栈空),面积为H[i]*(k-i-1)

        在所有柱插入后,逐个弹出栈顶[i],新栈顶为[j]面积为, 面积为H[i]*(C-i) (C为柱子数目)

        *注意到面积计算公式相似,可以在最后增加一个高度为0的哨兵柱子,可以简化处理步骤

思路:因为每当一个靠后的较低的柱子加入后,就相当于前面的较高的柱子的右扩到达了了边界,相当于以后他的多余高度就没用了。同时,在每次计算可能面积的时候,要考虑到向两边扩展的极限情况,因为左侧可能有柱子已经先被弹掉了,所以要以栈顶作为左边界。


解法:逐行维护一个向上伸展的柱状图,求出最大矩形面积

将无效格的坐标按照行数排序(列数无所谓),柱状图每向下延伸一行就找这一行中的无效格,将其对应的柱状图置为零

然后用柱状图的方法计算

/*
ID: frontie1
TASK: rectbarn
LANG: C++
*/
#include <iostream>
#include <cstdio>
#include <stack>

using namespace std;

int R, C, P;

int row[30010], col[30010];
int cnt = 0;
int cur_row[3010] = {0};
//int signal[3010];
stack<int> S;
int output = 0;
int tem;

void quicksort(int st, int ed)
{
    if(st >= ed) return;
    int lo = st, hi = ed;
    int tem_row = row[lo], tem_col = col[lo];
    while(lo < hi){
        while(lo < hi && tem_row <= row[hi]) --hi;
        row[lo] = row[hi]; col[lo] = col[hi];
        while(lo < hi && row[lo] <= tem_row) ++lo;
        row[hi] = row[lo]; col[hi] = col[lo];
    }
    row[lo] = tem_row; col[lo] = tem_col;
    quicksort(st, lo-1);
    quicksort(lo+1, ed);
}

int main()
{
    freopen("rectbarn.in", "r", stdin);
    freopen("rectbarn.out", "w", stdout);

    cin >> R >> C >> P;

    for(int i = 0; i < P; ++i){
        cin >> row[i] >> col[i];
    }

    quicksort(0, P-1);

    for(int i = 1; i <= R; ++i){
        for(int k = 1; k <= C; ++k){
            ++cur_row[k];
        }
        while(cnt < P && row[cnt] == i){
            cur_row[col[cnt]] = 0;
            ++cnt;
        }

        for(int k = 1; k <= C; ++k){
            while(!S.empty() && cur_row[S.top()] > cur_row[k]){
                tem = S.top(); S.pop();
                output = max(output, cur_row[tem]*(k-(S.empty() ? 0 : S.top())-1));
                //signal[tem] = cur_row[tem]*(k-tem);
            }
            S.push(k);
        }
        while(!S.empty()){
            tem = S.top(); S.pop();
            output = max(output, cur_row[tem]*(C-(S.empty() ? 0 : S.top())));
            //signal[tem] = cur_row[tem]*(C-(S.empty() ? 0 : S.top()));
        }
//        for(int k = 1; k <= C; ++k){
//            cout << signal[k] << '\t';
//        }
//        cout << endl;
    }

    cout << output << endl;

    return 0;
}

总结:掌握丰富的模型确实重要

参考:http://www.cnblogs.com/lichen782/p/leetcode_maximal_rectangle.html

STM32交流采样电路设计:从互感器选型到ADC软件处理全解析 交流采样是电力监测与电机控制中的基础技术,其核心在于将高压大电流隔离变换为小信号,并调理至单极性ADC量程内。通过互感器实现电气隔离,利用采样电阻将电流转为电压,再经偏置电路抬升双极性信号,最后由运放调理匹配STM32的ADC输入范围。这一信号链设计直接影响相位与幅值线性度,是保证计量精度的关键。在智能电表、逆变器控制、工业自动化等场景中,合理的采样电阻选型、偏置计算及PCB抗干扰布局能显著提升系统稳定性。本文基于STM32平台,深入解析交流采样电路的整体设计思路与实操细节,涵盖互感器选型、运放调理、ADC 阅读详情

相关推荐

人脸情绪识别(使用深度学习和OpenCV)

基于opencv与深度学习的人脸情绪识别系统

mx0390304的博客 8251

单调栈 整理 USACO06NOV、Largest Rectangle in a Histogr、POJ2796

单调栈 栈 一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表 它按照先进后出的原则存储数据 先进入的数据被压入栈底,最后的数据在栈顶 单调栈 栈内部的元素是具有单调性的一种数据结构,分为单调递增栈和单调递减栈 性质 满足从栈底到栈顶的元素具有单调性 满足栈的先进后出特性,越靠近栈顶的元素越早出栈 实现 对于一个单调递增栈,若当前进栈的元素为 xxx 如果当前栈为空或者 x...

qcwlmqy的博客 296

写一个b站爬虫(思路)

part 0 安装 scrapy, requests part 1 信息获取 打开番剧索引链接(https://www.bilibili.com/anime/index/) F12控制台,选中NETWORK,来到xhr文件,我们可以找到了存放番剧json的地方

kou的博客 484

P6283 [USACO20OPEN]The Moo Particle S——单调栈或前后缀

题目来源: P6283 [USACO20OPEN]The Moo Particle S 题目大意:给出一推坐标,连个点之间连线的斜率>=0即可合并到两点间的任意一个点上,问合并完,最后剩的点的最小个数。 先将坐标按照第一关键字X,第二关键字Y排序。 排序后,我们发现,一个点要与左边的点连通,需要左边有点的y值比当前点小,有右边的点连通,需要右边有点当前的y值大。 方法一:维护从左到右的最小值,维护从右到左的最大值,找到与左右分离的点,则是一个新的连通块。 方法二:我们发现最后分离的点,从左到右y值由小

lengxuenong的博客 389

SQLSTATE58030

在优化一条SQL的时候遇到了执行错误 gtlions =# select t1.telnumber,t2.ua,t2.url,t1.apply_name,t2.apply_name from tb1 t1 gtlions -# left outer join tb2 t2 on t1.sid = t2.ipsid gtlions-# where t1.sum_date=20141128 a

Gtlions Tracker 3659

华为手机连接Win11失败?内核隔离与驱动签名冲突的终极解决指南

在Windows操作系统中,驱动程序是硬件与系统通信的桥梁,其数字签名机制是保障系统内核安全的核心防线。基于虚拟化的安全技术通过强制验证驱动签名,能有效隔离恶意代码,提升系统抵御高级威胁的能力。然而,严格的签名策略有时会与部分硬件驱动产生兼容性问题,导致设备无法识别,直接影响文件传输、应用调试等核心工作流。本文聚焦于华为手机在开启Windows 11内核隔离功能时出现的连接故障,深入剖析驱动签名验证与Hypervisor保护的代码完整性原理,并提供从驱动更新、策略调整到无线替代方案的完整解决路径,帮助用户在

weixin_31309419的博客 351

[USACO09MAR]向右看齐Look Up————单调栈

题解:本题主要考查单调栈。先构建一个栈,如果比栈顶的数大就a[i]是之前栈顶数的仰望对象,记录它的仰望对象并将原来栈顶的数出栈,反之再将a[i]进栈。 代码如下: #include&lt;iostream&gt; using namespace std; int a[653576],sum[374734]; int n,top=1,i,j; struct b { int num;int v...

wly1127的博客 371

Oracle数据库的内存管理优化技巧

Oracle数据库作为企业级数据库管理系统,广泛应用于各种业务场景。内存管理是Oracle数据库性能优化的关键环节,合理的内存管理可以显著提高数据库的响应速度和吞吐量。本文的目的是深入探讨Oracle数据库内存管理的优化技巧,涵盖了系统全局区(SGA)和程序全局区(PGA)的管理、内存分配算法、内存参数调整等方面。通过详细的讲解和实际案例分析,帮助读者掌握优化Oracle数据库内存使用的方法,提高数据库的性能和稳定性。

2502_91592937的博客 996

洛谷 P2947 [USACO09MAR]向右看齐Look Up【单调栈】

题目描述 Farmer John's N (1 <= N <= 100,000) cows, conveniently numbered 1..N, are once again standing in a row. Cow i has height H_i (1 <= H_i <= 1,000,000). Each cow is looking to her left t...

weixin_33901843的博客 209

基于STM32F407的定时器以及定时器中断的实现

基于STM32F407的定时器以及定时器中断的实现

weixin_57941207的博客 5228

MAC(m1)-VMWare Fusion安装CentOS7.9

MAC(m1)-VMWare Fusion安装CentOS7.9

兴趣是最好的老师 1767

【BZOJ】1657: [Usaco2006 Mar]Mooo 奶牛的歌声(单调栈)

http://www.lydsy.com/JudgeOnline/problem.php?id=1657 这一题一开始我想到了nlog^2n的做法。。。显然可做,但是麻烦。(就是二分+rmq) 然后我仔细的想了想,恩,对,单调栈可以完成。。。他们有传递性的。。 然后你懂的。。 #include <cstdio> #include <cstring> ...

231

079、镜头阴影校正(LSC)精讲:径向衰减模型、增益矩阵生成与产线标定技巧

《镜头阴影校正(LSC)实战精要》 本文从实际案例出发,深入解析镜头阴影校正的核心技术与产线应用。作者通过一个典型故障案例(0.05mm镜片偏移导致LSC失效)揭示了LSC不仅是数学问题,更是光学-机械-工艺耦合系统。 【关键技术点】 模型优化:提出"径向+切向"双分量模型替代传统cos⁴θ模型,采用5阶多项式拟合径向衰减,1阶线性补偿切向误差 增益矩阵生成:采用自适应网格技术,在边缘区域加密网格,结合中值滤波与高斯平滑消除噪声干扰 产线标定:强调光源均匀性校准(积分球vs平板光源)、坏点预处理、温度补偿等

zzfmlxs的博客 102

USACO 2005 Cleaning Shifts 带权区间调度、覆盖问题 单调栈优化dp

首先,根据区间右端点从小到大的顺序对区间排序,之后以区间为阶段进行线性动归。 dp[x]的意义是第x个区间为最后一个区间,从开始时间到a[x].ri这段时间的最小花费。 计算dp[x]的时候,是找一个前面存在的p,使得   a[x].le -1 根据计算的顺序,维护一个只入队,不出队的单调递增队列,配合二分查找 即可快速完成 查找最优解的任务。 时间复杂度O

便纵有千种风情 804

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

P2947 [USACO09MAR]Look Up S(单调栈)

P2947[USACO09MAR]Look Up S #include <iostream> #include <cstdio> #include <string> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <cstring> #include <set> #include .

Ghostttttttiii的博客 387

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

USACO 06 NOV Bad Hair Day【单调栈】

新年第二题被单调栈教做人。 题目: Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self-conscious about her messy hairstyle, FJ wants to count the number of other cows tha...

二喵君的博客 597

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【BZOJ3885】【Usaco2015 Jan】Cow Rectangles 某奇怪的最大子矩形

题意: 坐标系上给出n个点,分”H”和”G”,一个整点坐标上至多一个点。 现在求一个不包含”G”的包含尽量多”H”的子矩形,然后在保证”H”最多的情况下还要问最小面积。 输出”H”的最大数量,和保证”H”最多时的最小矩形面积。 题解: 我们发现因为坐标有限制[0,1000] (注意有”0”!!!),所以它是一个矩形。 第一问: 首先我们可以参照极大子矩形的做法算出所有的极大子矩形,然

辗转山河弋流歌 1731

usaco6.1.1 Postal Vans

一 原题 Postal Vans ACM South Pacific Region -- 2003 Tiring of their idyllic fields, the cows have moved to a new suburb. The suburb is a rectangular grid of streets with a post office at its

max_kibble的博客 559

usaco6.1.2 A Rectangular Barn

一 原题 A Rectangular Barn Mircea Pasoi -- 2003 Ever the capitalist, Farmer John wants to extend his milking business by purchasing more cows. He needs space to build a new barn for the cows. F

max_kibble的博客 514

usaco training 6.1.2 A Rectangular Barn 题解

【原题】 A Rectangular Barn Mircea Pasoi -- 2003 Ever the capitalist, Farmer John wants to extend his milking business by purchasing more cows. He needs space to build a new barn for the cows.

阿蒋的专栏 2242

USACO6.1.2 A Rectangular Barn(rectbarn)

本题求最大子矩形,所以big barn的方法便不适用了,给出另一种方法: 设h[ i ][ j ]为点(i,j)向上方扩展的最大高度, l[ i ][ j ]为( i , h[ i ][ j ] )这条线段向左边扩展的最长距离,r[ i ][ j ]为( i , h[ i ][ j ] ) 向右边扩展的最长距离 则 S = h[ i ][ j ] × ( l[ i ][ j ] + r[ i

xsy_victory的专栏 450

[USACO 6.1.2] A Rectangular Barn

题目大意   给出一个R*C的矩形,里面有P个1*1的矩形是损坏的,选出一个最大的矩形并且不包含损环部分. 题解   其实,在刘汝佳的书上曾经讲过类似的题目.具体大家自己找找看吧.   设一个left和right数组.left[i][j],right[i][j]分别表示从(i,j)这个1*1的矩形(后文为方便表述称为格子)向左,右以这个格子最大高度(即向上延伸最长的长度)能够推进的最大长度...

weixin_30636089的博客 163

USACO 6.1解题报告

Postal Vans题目翻译:http://www.nocow.cn/index.php/Translate:USACO/vans计算哈密顿回路。实际上有递推式(需要使用高精度),可以使用矩阵快速幂加速,但是不使用矩阵快速幂也可以通过本题。 f[1]=0,f[2]=2,f[3]=4,f[4]=12; f[i]= 2*(f[i-1]+f[i-2]-f[i-3])+f[i-4];A Rectang

SmallSXJ的博客 537

usaco 6.1 A Rectangular Barn(最大子矩阵)

A Rectangular Barn Mircea Pasoi -- 2003 Ever the capitalist, Farmer John wants to extend his milking business by purchasing more cows. He needs space to build a new barn for the cows. FJ purchase

志当存高远 1124

USACO 6.1.2 A Rectangular Barn

题目大意: 给出r*c的矩阵中p个障碍点的位置,求能放置矩形的最大面积。 简单题解: 令h[i][j]表示(i,j)到竖直向上的最近障碍点(或顶端)的线段的长度,left[i][j]、right[i][j]分别表示该线段向左、右延伸的长度。则max{h[i][j]*(left[i][j]+right[i][j]-1)}即为答案。 使用动态规划求h[i][j]、left[i]...

weixin_30505485的博客 171

hdu5033 Building单调栈

题意 一条直线上有很多房子,房子的信息包括位置和高度,给出一些询问,当有一个人站在某两个房子之间时,能看到的最大的角度(尽可能广阔的天空) 求解 可以很容易想到求解左边最大的仰角,右边最大的仰角,然后用180度减去两者,所以我们对查询排序,离线依次处理从左到右每个查询的向左看最大仰角,从右向左处理每个查询的向右看最大仰角,离线处理的目的是利用已经处理过的查询的信息,从而降低复杂度,首先,对于一

liuzhan214的博客 523
上一篇: USACO 6.1.1 Postal Vans 特例dp
下一篇: USACO 6.1.3 Cow XOR 字典树
Frontier_Setter
博客等级 码龄10年 2粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值