UESTC_秋实大哥去打工 2015 UESTC Training for Data Structures<Problem G>

G - 秋实大哥去打工

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

Submit Status

天行健,君子以自强不息。地势坤,君子以厚德载物。

天天过节的秋实大哥又要过节了,于是他要给心爱的妹子买礼物。但由于最近秋实大哥手头拮据,身为一个男人,他决定去打工!

秋实大哥来到一家广告公司。现在有n块矩形墙从左至右紧密排列,每一块高为Hi,宽为Wi。

公司要求秋实大哥找出一块最大的连续矩形区域,使得公司可以在上面贴出最大的海报。

Input

第一行包含一个整数n,表示矩形墙的个数。

接下来n行,每行有两个整数Wi,Hi,表示第i块墙的宽度和高度。

1≤n≤200000,保证Wi,Hi以及最后的答案<231。

Output

最大的连续矩形的面积。

Sample input and output

Sample Input Sample Output
3
3 4
1 2
3 4
14

解题报告

关键是找到某个元素所能扩展到的最远位置,我们维护一个单调栈即可,扫描一遍,若该元素大于栈顶元素则入栈,若小于则出栈并更新答案,注意可能一直单调递增,可在最后加一个高度为0的虚矩形,保证扫描结束后所有合法矩形已经全部出栈.

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdio>
 5 typedef long long ll;
 6 using namespace std;
 7 const int maxn = 2e5 + 50;
 8 int h[maxn],w[maxn],sum[maxn],s[maxn],pos[maxn];
 9
10 int main(int argc,char *argv[])
11 {
12   int n;
13   scanf("%d",&n);
14   for(int i = 1 ; i <= n ; ++ i)
15    scanf("%d%d",&w[i],&h[i]);
16   sum[0] = 0;
17   h[n+1] = 0;
18   for(int i = 1 ; i <= n ; ++ i)
19    sum[i] = sum[i-1] + w[i];
20   int top = 0 , ans = 0 ;
21   for(int i = 1 ; i <= n+1 ; ++ i)
22    {
23          if (top > 0 && h[i] < s[top-1])
24           {
25                 while(top > 0 && h[i] < s[top-1])
26                  ans = max(ans , (sum[i-1] - sum[pos[--top]-1])*s[top]);
27           s[top++] = h[i];
28        }
29       else
30        {
31              pos[top] = i;
32              s[top++] = h[i];
33        }
34    }
35   printf("%d\n",ans);
36   return 0;
37 }
时间: 2024-07-30 10:18:56

UESTC_秋实大哥去打工 2015 UESTC Training for Data Structures<Problem G>的相关文章

UESTC_秋实大哥与快餐店 2015 UESTC Training for Data Structures&lt;Problem C&gt;

C - 秋实大哥与快餐店 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 朝为田舍郎,暮登天子堂.秋实大哥从小就怀抱有远大的理想,所以他开了一家快餐店. 秋实大哥根据菜的口感,给每一道菜一个唯一的CID,同时对于前来的客人,根据他们的口味喜好,秋实大哥会给每一个客人一个PID. 对于一个标号为PID的客人,他对标号为CID的菜的喜爱程度为PID∧CI

UESTC_秋实大哥打游戏 2015 UESTC Training for Data Structures&lt;Problem H&gt;

H - 秋实大哥打游戏 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status ”也许人生就是游戏,你却执意耕耘着春秋.” —— 秋实大哥叹道. 秋实大哥是一个喜欢玩游戏的人,相较于其他种类的游戏,秋实大哥更喜欢自由开放的沙盒游戏,尤其是minecraft. 现在,秋实大哥发现了N个独立的小岛(编号1,2,3.....N),于是他要把这些小岛连起来. 每一次

UESTC_秋实大哥与家 2015 UESTC Training for Data Structures&lt;Problem E&gt;

E - 秋实大哥与家 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 秋实大哥是一个顾家的男人,他认为人生就是旅途,不管我们漂到哪,最终还是会回到温暖的地方——家. 所以他买了很多家具. 秋实大哥的家可以看成一个W×H的矩阵,每一件家具可以看成一个矩形,他们放置在秋实大哥的家里,相互之间没有重叠. 现在秋实大哥购置了一个新的大小为1×M的家具,秋实大

UESTC_秋实大哥与花 2015 UESTC Training for Data Structures&lt;Problem B&gt;

B - 秋实大哥与花 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 秋实大哥是一个儒雅之人,昼听笙歌夜醉眠,若非月下即花前. 所以秋实大哥精心照料了很多花朵.现在所有的花朵排成了一行,每朵花有一个愉悦值. 秋实大哥每天要对着某一段连续的花朵歌唱,然后这些花朵的愉悦值都会增加一个相同的值v(v可能为负). 同时他想知道每次他唱完歌后这一段连续的花朵的

UESTC_秋实大哥与战争 2015 UESTC Training for Data Structures&lt;Problem D&gt;

D - 秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 男儿何不带吴钩,收取关山五十州. 征战天下是秋实大哥一生的梦想,所以今天他又在练习一个对战游戏. 秋实大哥命令所有士兵从左到右排成了一行来抵挡敌人的攻击. 敌方每一次会攻击一个士兵,这个士兵就会阵亡,整个阵列就会从这个位置断开:同时有的时候已阵亡的士兵会受人赢气息感染而复活. 秋

UESTC_秋实大哥与小朋友 2015 UESTC Training for Data Structures&lt;Problem A&gt;

A - 秋实大哥与小朋友 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 秋实大哥以周济天下,锄强扶弱为己任,他常对天长叹:安得广厦千万间,大庇天下寒士俱欢颜. 所以今天他又在给一群小朋友发糖吃. 他让所有的小朋友排成一行,从左到右标号.在接下去的时间中,他有时会给一段区间的小朋友每人v颗糖,有时会问第x个小朋友手里有几颗糖. 这对于没上过学的孩子来

UESTC_秋实大哥搞算数 2015 UESTC Training for Data Structures&lt;Problem N&gt;

N - 秋实大哥搞算数 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 秋实大哥大学物理挂科了,于是在下学期的前两周的某一天要悲剧的补考.为了不给学校的挖掘机大楼做贡献,秋实大哥决定在假期里努力复习.当然,良好的计算能力也是非常必要的,毕竟是涉及计算自己做多少分的题能够通过考试的问题.现在他给自己出了一大堆长长的只有涉及整形四则运算式子,然后埋头计算

UESTC_秋实大哥掰手指 2015 UESTC Training for Dynamic Programming&lt;Problem B&gt;

B - 秋实大哥掰手指 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 2048/1024KB (Java/Others) Submit Status 秋实大哥发现数据结构专题出到了N题,但是他一时算不出来已经有了几道题,他就萌萌地掰手指数. 这个时候他发现,虽然人们根据手指数创造了十进制数,但是两只手同时能表达的数是0-10一共十一个数字. 这样,他觉得如果用手指表现十进制数,同一个十进制数就会有很多种不同的表现方法. 比如,11

UESTC_秋实大哥下棋 2015 UESTC Training for Data Structures&lt;Problem I&gt;

I - 秋实大哥下棋 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 胜负胸中料已明,又从堂上出奇兵.秋实大哥是一个下棋好手,独孤求败的他觉得下棋已经无法满足他了,他开始研究一种新的玩法. 在一个n×m的棋盘上,放置了k个车,并且他在棋盘上标出了q个矩形,表示矩形内部是战略要地. 秋实大哥要求一个矩形内的每一个格子,都至少能被一辆在矩形内的车攻击到,