1. 程式人生 > >洛谷P3467 [POI2008]PLA-Postering

洛谷P3467 [POI2008]PLA-Postering

單調棧

不難發現一次性抹掉連續的一層是最優的,舉個例子 45654,我們先抹掉4,變成01210,肯定是最優的,所以我們就得到了一個優秀的做法,維護一個y的單調棧,每次加入一個新高度,就把高度大於它的彈出去,因為大於他的那些就要單獨去覆蓋了,這些低的可以用一整張覆蓋,然後若當前加入高度於棧頂高度相同,就可以像例子那樣一下覆蓋一整塊,然後我們記錄有幾個相同的整塊就好了

程式碼

//By AcerMo
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int M=250000; int n,s[M],top; inline int read() { int x=0;char ch=getchar(); while (ch>'9'||ch<'0') ch=getchar(); while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x; } signed main() { n=read();int ans=n; for (int i=1;i<=n;i++) { int x=read
(),y=read(); while (top&&s[top]>y) top--; if (s[top]==y) ans--; s[++top]=y; } cout<<ans; return 0; }