2017.3.13 E
来源:互联网 发布:安卓优化软件排行榜 编辑:程序博客网 时间:2024/04/30 20:11
对于
原来只是单纯地循环所以超时;
A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rectangles have equal widths but may have different heights. For example, the figure on the left shows the histogram that consists of rectangles with the heights 2, 1, 4, 5, 1, 3, 3, measured in units where 1 is the width of the rectangles:
Usually, histograms are used to represent discrete distributions, e.g., the frequencies of characters in texts. Note that the order of the rectangles, i.e., their heights, is important. Calculate the area of the largest rectangle in a histogram that is aligned at the common base line, too. The figure on the right shows the largest aligned rectangle for the depicted histogram.
Usually, histograms are used to represent discrete distributions, e.g., the frequencies of characters in texts. Note that the order of the rectangles, i.e., their heights, is important. Calculate the area of the largest rectangle in a histogram that is aligned at the common base line, too. The figure on the right shows the largest aligned rectangle for the depicted histogram.
The input contains several test cases. Each test case describes a histogram and starts with an integern, denoting the number of rectangles it is composed of. You may assume that1<=n<=100000. Then follow n integers h1,...,hn, where0<=hi<=1000000000. These numbers denote the heights of the rectangles of the histogram in left-to-right order. The width of each rectangle is1. A zero follows the input for the last test case.
For each test case output on a single line the area of the largest rectangle in the specified histogram. Remember that this rectangle must be aligned at the common base line.
7 2 1 4 5 1 3 34 1000 1000 1000 10000
84000
还是太幼稚了 10000000的10000单纯地循环怎么可以搞定
#include <iostream>#include<algorithm>#include<map>using namespace std;const int maxn=100005;const int maxh=1000000005;int h[maxn],od[maxn];long long s;long long maxs;int n;long long judge(int t){ long long max2=0; long long ss1=0; for(int i=t;i<n;i++) { if(h[i]>=h[t]) ss1+=h[t]; else break; } for(int i=t-1;i>=0;i--) { if(h[i]>=h[t]) ss1+=h[t]; else break; } return ss1;}int main(){ while(cin>>n&&n) { int maxs=0; for(int i=0;i<n;i++) { cin>>h[i]; od[i]=h[i]; } for(int i=0;i<n;i++) { if(h[i]*n<=maxs) continue; s=judge(i); if(s>maxs) maxs=s; } cout << maxs << endl; } return 0;}
大神的思维就是巧,用了一个栈,干干净净的就解决了,用一个栈,存储当前高度以及当前可组合数目,而且很好的解决了前高后低情况的问题
#include <iostream>#include<stack>using namespace std;stack<pair<int,int> > s;int main(){ int n; while(cin>>n&&n) { long long ans=0,num=0; for(int i=0;i<n;i++) { long long x; cin>>x; num=0;//开始无 while(!s.empty()&&s.top().first>=x)//如果矮或等高就进入开始 { num+=s.top().second; ans=max(ans,num*s.top().first); s.pop(); } s.push(make_pair(x,num+1)); } num=0;//一定不能忘记清零 //最后计算 while(!s.empty()) { num+=s.top().second; ans=max(ans,num*s.top().first); s.pop(); } cout << ans << endl; } return 0;}
0 0
- 2017.3.13 E
- 2017.3.13 E
- 13e
- Holes CF 13E
- e
- E
- E
- e
- e
- e
- e
- e
- E
- e
- E
- e
- e
- E
- webservice学习wsdl解读(2)
- 关于spring boot 事务
- A+B for Input-Output Practice (II)
- 新的开始
- 1135降序排序
- 2017.3.13 E
- android使用方法---图片的高斯模糊
- 正则表达式简介
- 1134求最大值
- 数据结构-从归并排序到数组的逆序对数(微软面试题)
- ResultSet类—结果集容易忽略的问题
- 1056这道题不能做
- 一个使用纯Win32 SDK和C语言实现的五子棋游戏
- 创建型模式-生成器(builder)