題目大意:
n個矩形,排成一排. 現在希望用盡量少的矩形海報cover住它們.
思路:
直接維護乙個遞增的單調棧,注意如果棧頂元素和當前值相同,那麼當前值不加入棧中。
1 #include2#define ios ios::sync_with_stdio(false);//
不可再使用scanf printf
3#define max(a, b) ((a) > (b) ? (a) : (b))//
禁用於函式,會超時
4#define min(a, b) ((a) < (b) ? (a) : (b))
5#define mem(a) memset(a, 0, sizeof(a))
6#define dis(x, y, x1, y1) ((x - x1) * (x - x1) + (y - y1) * (y - y1))
7#define mid(l, r) ((l) + ((r) - (l)) / 2)
8#define lson ((o)<<1)
9#define rson ((o)<<1|1)
10#define accepted 0
11#pragma comment(linker, "/stack:102400000,102400000")//
棧外掛程式12
using
namespace
std;
13 inline int
read()
1417
while (ch>='
0'&&ch<='9')
18return x*f;19}
20 typedef long
long
ll;21
const
int maxn = 1000000 + 10;22
const
int mod = 1000000007;//
const引用更快,巨集定義也更快
23const
int inf = 1e9 + 7;24
const
double eps = 1e-6;25
26 stackq;
27int
main()
2839
if(!q.empty() && q.top() == y)continue;40
q.push(y);41}
42 ans +=q.size();
43 printf("
%d\n
", ans);
44return
accepted;
45 }
bzoj3190 單調棧 賽車
description 這裡有一輛賽車比賽正在進行,賽場上一共有n輛車,分別稱為個g1,g2 gn。賽道是一條無限長的直線。最初,gi位於距離起跑線前進ki的位置。比賽開始後,車輛gi將會以vi單位每秒的恆定速度行駛。在這個比賽過程中,如果一輛賽車曾經處於領跑位置的話 即沒有其他的賽車跑在他的前面 ...
bzoj3039 玉蟾宮 單調棧
題目描述 給定乙個01矩陣,找出乙個面積最大的子矩陣,使得其中的元素均為1。輸出這個最大面積乘3。輸入第一行兩個整數n,m,表示矩形土地有n行m列。接下來n行,每行m個用空格隔開的字元 f 或 r 描述了矩形土地。輸出輸出乙個整數,表示你能得到多少銀子,即 3 最大 f 矩形土地面積 的值。樣例輸入...
BZOJ3956 Count(單調棧 線段樹)
傳送門 感覺這道題蘊含了一些十分巧妙的性質。可以發現好點對實際上很少,最多不超過2n個。當乙個點作為點對中的較小點的時候,最多只能和它左邊第乙個大於等於它的點以及它右邊第乙個大於等於它的點配對。維護乙個單調遞減的棧就可以求出所有的好點對。還可以發現對於一段詢問的區間,找出區間中最大的點的位置,那麼區...