51nod 1102 面积最大的矩形
求取:以某矩形g[i]为最小值的区间的左右端点,得到一个临时解。所有临时解中的最大值即为解。
求取区间的方法可以用单调栈,也可以用下面这种十分简洁的类似于递归的方法。下面这种解法求出来的区间是开区间,也正是因为开区间,所以跳转很方便。
L[i]是以第i根柱子为最小值的左开区间点。若g[i] <= g[L[i]],则L[i]=L[L[i]];
打个比方,柱子高度为1,3,9,7,5。g[4]=7,一开始L[4]初始化为3,那么若g[4]<=g[L[4]],即7=g[4]<=g[3]=9,那么L[4]=L[L[4]]=L[3]=2。
#include <stdio.h>
#include <iostream>
using namespace std; #define ll long long
const int maxN=1e5+;
ll N, L[maxN], R[maxN], g[maxN]; int main() {
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
#endif
scanf("%lld", &N);
for (int i = ; i <= N; ++i)
scanf("%lld", &g[i]);
for (int i = ; i <= N; ++i) {
L[i] = i - ;
R[i] = i + ;
}
for (int i = ; i <= N; ++i)
while (L[i] && g[L[i]] >= g[i]) L[i] = L[L[i]];
for (int i = N; i >= ; --i)
while (R[i] <= N && g[R[i]] >= g[i]) R[i] = R[R[i]]; ll ans = ;
for (int i = ; i <= N; ++i)
ans = max(ans, g[i] * (R[i] - L[i] - ));
printf("%lld\n", ans);
return ;
}
51nod 1102 面积最大的矩形的更多相关文章
- 51nod 1102 面积最大的矩形 (单调栈)
链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102 思路: 首先介绍下单调栈的功能:利用单调栈,可以找到从左/ ...
- 51nod 1102 面积最大的矩形(单调栈)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102 题意: 思路: 做法就是求出每个长方形向左向右所能延伸的最大距离. ...
- 51nod 1102 面积最大的矩形 && 新疆大学OJ 1387: B.HUAWEI's billboard 【单调栈】+【拼凑段】(o(n) 或 o(nlog(n))
题面1:  题面2:  两道题除了数据范围不同,没有任何差异,两道题都可以o(n)(单调栈),o(nlog(n))(我自己的做法)解决. 解题思路1:(单调栈) 对于每个点找到右边第一个比它小的位 ...
- 51nod 1102 单调栈
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102 1102 面积最大的矩形 基准时间限制:1 秒 空间限制:1310 ...
- 编写一个矩形类,私有数据成员为矩形的长( len)和宽(wid),wid设置为0,有参构造函数设置和的值,另外,类还包括矩形的周长、求面积、取矩形的长度、取矩形的长度、取矩形的宽度、修改矩形的长度和宽度为对应的形参值等公用方法。
class Rectangle { private double len, wid; public Rectangle()//求矩形周长 { len = 0; wid = 0; } public Re ...
- 51NOD 1559:车和矩形——题解
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1559 波雷卡普有一个n×m,大小的棋盘,上面有k个车.他又放了q个矩形在 ...
- hdu 1255 覆盖的面积 (扫描线求矩形交)
覆盖的面积 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- 【51nod】1559 车和矩形
题解 离线读入,我们发现一个矩形能被保护,矩形内部所有列上必定有一辆车,或者所有行上必定有一辆车 分两次进行处理 第一次按照横坐标把车加进去,然后查询最大横坐标在这个位置的矩形,纵坐标区间里的车出现位 ...
- HDU-1255 覆盖的面积 覆盖的矩形面积并
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 需要保存区间覆盖线>=2的线段的长度,根据情况来更新... //STATUS:C++_AC ...
随机推荐
- CountDownLatch 使用(模拟一场比赛)
java.util.concurrency中的CountDownLatch,主要用于等待一个或多个其他线程完成任务.CountDownLatch在初始化时,会被赋一个整数,每次执行countDown( ...
- serilization 序列化 transient 不被序列化
Serizlizable 作用 对于一个存在于Java虚拟机中的对象来说,其内部的状态只保持在内存中.JVM停止之后,这些状态就丢失了.在很多情况下,对象的内部状态是需要被持久化下来的.提到持久化,最 ...
- JS数组和函数 小记
数组 JS中的数组来自window,是一个全局的对象,typeof的值是'object'. 创建数组: 1.Array(3):当只传一个值的时候,会生成一个长度为该数值的空数组. 2.Array(3, ...
- IOS Core Image之二
在上篇博客IOS Core Image之一中了解了下CIImage.CIFilter.CIContext三个类的使用,这篇了解下滤镜链(多滤镜)和人脸检测(不是人脸识别). 一.多滤镜 1.有些效果不 ...
- [java] byte不能直接相加
以下赋值语句将产生一个编译错误,原因是赋值运算符右侧的算术表达式在默认情况下的计算结果为 int 类型. // Error: conversion from int to byte:byte z = ...
- golang数组与切片
golang中坑的慢慢踩! golang中的数组是值类型,函数调用是传入的是数组的拷贝,如果想改变数组的值,可考虑使用指针数组,即函数调用时传入数组的地址 golang中的切片是引用类型,但是在函数中 ...
- java web工程web.xml介绍
转载自:http://blog.csdn.net/believejava/article/details/43229361 Web.xml详解: 1.web.xml加载过程(步骤) 首先简单讲一下,w ...
- golang 的 sync.WaitGroup
WaitGroup的用途:它能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine执行完成. 官方对它的说明如下: A WaitGroup waits for ...
- 基于.Net下整合RestSharp,实现REST服务客户端
一. 准备工作 1. 点击此访问 RestSharp 官网,可作参考 2. VS2012 中安装支持.Net4.0的最新版 RestSharp 插件 工具---NuGet程序包管理器---程序包管理器 ...
- 洛谷 P3391 文艺平衡树
题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 --b ...