POJ-2559 维护单调栈.细节阿细节
来源:互联网 发布:c 并发编程 书籍 编辑:程序博客网 时间:2024/06/09 16:55
这题意思很简单...就是给一排并列宽为1,长度输入数据的图像..问能找到的最大矩形面积是多大...
思路也很简单...基本框架是: 从一边做到另一边..维护一个单调的栈..栈顶的矩形边最长..栈底的最短...当前扫到某个位置的矩形..就判断弹栈..直道栈顶的矩形长小于等于当前矩形..
但是..细节阿...首先...不是从一边做到另一边就完了..还要从另一边再做回来~~要做两次才能得到结果...再一个...注意这种情况阿..:
3 2 1 2
判断的时候稍不细心答案就是2了...但显然答案是3的说...因为在做的时候..首先是2进栈..然后到1..但是1又把2弹掉了...发现开始的处理显然是欠考虑的...虽然长度为2的是要出栈..但是2的这个位置不能丢弃..要记录传递给第2位的1~~~~
program:
#include<iostream>#include<string.h>#include<stdio.h>#include<algorithm>#include<math.h>#include<queue>using namespace std; struct node{ __int64 h,s; }mystack[100005]; __int64 ans,x,k,n,p,a[100005],t;int main(){ freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); while (~scanf("%I64d",&n)) { if (!n) break; ans=0; for (p=1;p<=n;p++) scanf("%I64d",&a[p]); a[0]=a[n+1]=0; n++; k=0; for (p=1;p<=n;p++) { x=a[p]; t=p; while (k && mystack[k].h>=x) { if (mystack[k].h*(p-mystack[k].s)>ans) ans=mystack[k].h*(p-mystack[k].s); if (mystack[k].s<t) t=mystack[k].s; k--; } if (!k || mystack[k].h!=x) { k++; mystack[k].h=x; mystack[k].s=t; } } k=0; for (p=n-1;p>=0;p--) { x=a[p]; t=p; while (k && mystack[k].h>=x) { if (mystack[k].h*(mystack[k].s-p)>ans) ans=mystack[k].h*(n-mystack[k].s-p); if (mystack[k].s>t) t=mystack[k].s; k--; } if (!k || mystack[k].h!=x) { k++; mystack[k].h=x; mystack[k].s=t; } } printf("%I64d\n",ans); } return 0;}
POJ-2559 维护单调栈.细节阿细节
- POJ-2559 维护单调栈.细节阿细节
- POJ 2559 Largest Rectangle in a Histogram --维护单调栈
- 细节
- 细节
- 细节
- 细节
- 细节
- 细节
- 细节
- POJ 2559 Largest Rectangle in a Histogram(单调栈维护最大矩形面积)
- POJ 3415 Common Substrings 后缀数组 + 单调栈维护
- POJ 2559 单调栈
- POJ 2559 单调栈
- poj 2559(单调栈)
- poj 2559 单调栈
- POJ 2559 单调栈
- poj 2559 单调栈
- poj 2559 单调栈
- 咖啡豆(JavaBean)·JSP中使用JavaBean
- socket通信 UDP文件传输(多客户端)——附源码
- 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路
- jdk中String对象的replace和replaceAll方法
- java中关键字:static
- POJ-2559 维护单调栈.细节阿细节
- 差分约束——HDOJ 1529
- 完美解决:xcode4.2 修改__MyCompanyName__,终于让我找到方法了
- 敏捷开发一千零一问系列之十二:敏捷实施的步骤?
- Win7 RTM及win v pc RC体验
- 水题 hdu 1070 milk
- Serial ATA (SATA) chipsets — Linux support status
- 2012.2.29
- 决定尘封