hrbsut 2151 变形金刚 (单调栈)
2017-07-24 18:02
176 查看
变形金刚 | ||||||
| ||||||
Description | ||||||
新一轮变形金刚来袭,这次霸天虎的头领叫做吊炸天。吊炸天有一个酷炫的攻击技能,能够横向摧毁一个矩形区域内的高楼大厦。但是有个弱点,这个矩形区域必须充满建筑物(不能有空白)。现在吊炸天面对一座城市,假设建筑物都是紧密挨着的(没有缝隙),现在按照顺序给你一些建筑物的宽和高(二维)。 这样的话...吊炸天一次性能摧毁的最大建筑面积是多少?(不考虑区域外造成的损坏) | ||||||
Input | ||||||
多组测试数据: 每组数据的第一行是一个整数n,表示建筑物的数目; 接下来的n行,每行有两个整数 w,h,分别表示对应建筑物的宽和高。 (1<= T <= 50, 1 <= n <= 50000,0<=总面积<=10^9) 如果n等于0 则结束。 | ||||||
Output | ||||||
对于每组数据,输出能一次性摧毁的最大面积。 | ||||||
Sample Input | ||||||
2 3 4 1 3 3 3 4 1 2 3 4 0 | ||||||
Sample Output | ||||||
12 14 | ||||||
Source | ||||||
2014暑假集训练习赛(8月6日) |
暴力会超时的。。。哇哇哇哇。。
单调栈 ,。
先将栈转化为单调递增的栈。
为啥呢。。
因为如果相邻的下一个比上一个要小的话那么他就不能继续往下连接了对不对??///哇,你表达的我根本听不懂啊。。。还是看代码吧。
建立一个栈 stack < pair < int ,int > > s;///为了省事就用pair了,第一个元素的 high 第二个是weight
int w=0;
while( !s.empty( ) && high <= s.top().first())
{
w += s.top().second ;
res = max(res,w * s.top().first );
s.pop();
}
s.push(make_pair(high , weight + w));///这里加上前边的为啥呢,,自己手动跑吧。。。
------------------------------------------------------------------------------------------------------------
你瞅瞅经历了上边的一遍骚操作你会很神奇的发现这个栈
ba61
已经是单调递增的了。
不要问为啥啊。你自己跑一下就知道了。。。
我们的操作不就为了这个吗。。。。
-------------------------------------------------------------------------------------------------------------
现在进行第二的骚操作了。
int tmp = 0;
while(!s.empty())
{
tmp+=s.top().second ;
res = max( res, tmp*s.top().first);
s.pop();
}
---------------------------------------------------差不多了
上代码
#include<bits/stdc++.h>
using namespace std;
int a;
int main()
{
int n;
while(scanf("%d",&n)==1&&n)
{
stack<pair<int ,int >>s;
int res=0;
int high , weight;
for(int i = 0; i < n ; i++)
{
scanf("%d %d",&weight,&high);
int w=0;
while(!s.empty()&&high <= s.top().second)
{
int mh=s.top().second;
int mw=s.top().first;
s.pop();
w+=mw;
res=max(res,mh*w);
}
s.push(make_pair(weight+w,high));
}///以上部分使得栈的first 元素是 单调递增 。。。
// printf("%d\n",res);
int tmp = 0;
while(!s.empty())
{
tmp+=s.top().first;//printf("s :%d %d\n",s.top().first ,s.top().second);
res=max(res,s.top().second*tmp);
s.pop();
}
printf("%d\n",res);
}
}
相关文章推荐
- Hrbust 2151 变形金刚【思维+前缀和】
- 白话算法(5) 魂斗罗大战变形金刚(兼做第一部分小结)
- 雷帝嘎嘎:山寨变形金刚 秒杀孩之宝
- 变形金刚----惊爆擎天柱种种绯闻----变形金刚
- 变形金刚的译名
- 美国牌变形金刚,朝鲜牌变性金刚
- 理想的工作流软件应该是变形金刚
- 几乎集Girdview所有技术为一体的超级变形金刚
- 图论 --- spfa + 链式向前星 (模板题) dlut 1218 : 奇奇与变形金刚
- 彭承:变形金刚和Cocos 2d-JS的邂逅
- 2015广工网络赛决赛-Problem E: 变形金刚(并查集)
- js变形金刚文字特效代码分享
- 2004.07.27,Tue - 变形金刚
- 电影“变形金刚”将于7.4.2007进入影院
- 变形金刚看完归来
- 它是变形金刚,这就是足够了…
- 印度科幻电影这是变形金刚么
- 不是HR,Leader你到底需要招什么样的程序员(变形金刚?超人?可能吗!)
- QE不是变形金刚
- 看了变形金刚的首映 ^_^