↓ 跳过正文
  1. Posts/

poj 2082 Terrible Sets (前缀和,单调栈)

·444 字·1 分钟

poj 2082 题目链接

题意:这道题简直就是。。。教给大家怎么把一句话把简单的题让人出得看不懂。。。真的一点意思都没有。给出n个矩形的宽度和高度,这些矩形并排顺次排列在x轴上,问最大面积。

思路:单调栈。 之前的最大矩形面积的宽度都是1.。这次不是1.。做个宽度的前缀和就好。。。1A

代码实现
 1/* ***********************************************
 2Author :111qqz
 3Created Time :2016年08月03日 星期三 18时54分40秒
 4File Name :code/poj/2082.cpp
 5************************************************ */
 6
 7#include <cstdio>
 8#include <cstring>
 9#include <iostream>
10#include <algorithm>
11#include <vector>
12#include <queue>
13#include <stack>
14#include <set>
15#include <map>
16#include <string>
17#include <cmath>
18#include <cstdlib>
19#include <ctime>
20#define fst first
21#define sec second
22#define lson l,m,rt<<1
23#define rson m+1,r,rt<<1|1
24#define ms(a,x) memset(a,x,sizeof(a))
25typedef long long LL;
26#define pi pair < int ,int >
27#define MP make_pair
28
29using namespace std;
30const double eps = 1E-8;
31const int dx4[4]={1,0,0,-1};
32const int dy4[4]={0,-1,1,0};
33const int inf = 0x3f3f3f3f;
34const int N=5E4+7;
35pi a[N];
36int l[N],r[N];
37int sum[N];
38int n;
39stack<int>stk;
40int main()
41{
42	#ifndef  ONLINE_JUDGE
43	freopen("code/in.txt","r",stdin);
44  #endif
45
46	while (~scanf("%d",&n))
47	{
48	    if (n==-1) break;
49	    while (!stk.empty()) stk.pop();
50	    sum[0] = 0 ;
51	    for ( int i = 1 ; i <= n ; i++)
52	    {
53		scanf("%d %d",&a[i].fst,&a[i].sec);
54		sum[i] = sum[i-1] + a[i].fst;
55	    }
56
57	    a[0].sec = -1;
58	    a[n+1].sec = -1;
59	    stk.push(0);
60	    int x;
61	    for ( int i = 1 ; i <= n ; i++)
62	    {
63		for (x=stk.top() ; a[x].sec>=a[i].sec ; x = stk.top()) stk.pop();
64		l[i] = x+1;
65		stk.push(i);
66	    }
67
68	    while (!stk.empty()) stk.pop();
69	    stk.push(n+1);
70	    for ( int i = n ; i >=1 ; i--)
71	    {
72		for (x=stk.top() ; a[x].sec>=a[i].sec ; x =stk.top()) stk.pop();
73		r[i] = x-1;
74		stk.push(i);
75	    }
76	    int ans = 0 ;
77	    for ( int i = 1 ; i <= n ; i++) ans = max(ans,(sum[r[i]]-sum[l[i]-1])*a[i].sec);
78	    printf("%d\n",ans);
79
80
81
82
83	}
84
85
86  #ifndef ONLINE_JUDGE
87  fclose(stdin);
88  #endif
89    return 0;
90}

相关文章

poj 1964 City Game(单调栈,输入挂)

·1006 字·3 分钟
poj 1964 题意:n*m 的 maze,由 ‘R’ 和 ‘F’ 组成,现在要求找到面积最大的矩形,使得矩形中所有格子都是 ‘F’。 思路:单调栈。一开始神 tm TLE 了,复杂度明明没问题啊。 结果看到有人说这题数据量比较大,scanf 会超时,所以要用输入挂,getchar 什么的。

poj 3250 Bad Hair Day(单调栈)

·442 字·1 分钟
poj 3250 题意: n头牛排成一列,第n只牛在最前面,第1只牛在最后面。第i只牛能看到的牛的个数是,它前面的且没有被其他牛遮挡的牛的个数,遮挡的条件是高度大于或者相同。现在问所有牛能看到的牛的个数的和。

poj 2559 Largest Rectangle in a Histogram (单调栈)

·657 字·2 分钟
poj 2559 题意:给定从左到右多个矩形,已知这此矩形的宽度都为1,长度不完全相等。这些矩形相连排成一排,求在这些矩形包括的范围内能得到的面积最大的矩形,求该面积。所求矩形可以横跨多个矩形,但不能超出原有矩形所确定的范围。

BZOJ 1657: [Usaco2006 Mar]Mooo 奶牛的歌声 (单调栈)

·1062 字·3 分钟
1657: [Usaco2006 Mar]Mooo 奶牛的歌声 # Time Limit: 5 Sec Memory Limit: 64 MB Submit: 634 Solved: 447 [Submit][Status][Discuss] Description # Farmer John’s N (1 <= N <= 50,000) cows are standing in a very straight row and mooing. Each cow has a unique height h in the range 1..2,000,000,000 nanometers (FJ really is a stickler for precision). Each cow moos at some volume v in the range 1..10,000. This “moo” travels across the row of cows in both directions (except for the end cows, obviously). Curiously, it is heard only by the closest cow in each direction whose height is strictly larger than that of the mooing cow (so each moo will be heard by 0, 1 or 2 other cows, depending on not whether or taller cows exist to the mooing cow’s right or left). The total moo volume heard by given cow is the sum of all the moo volumes v for all cows whose mooing reaches the cow. Since some (presumably taller) cows might be subjected to a very large moo volume, FJ wants to buy earmuffs for the cow whose hearing is most threatened. Please compute the loudest moo volume heard by any cow.