代码:
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 3e5 + 10; int n, ans, d, w; stack<int> s; // 单调栈 // 如果楼高度类似121(凸,两边相等,中间比两边的大),则海报个数=3-1=2 // 如果楼高度类似212(凹,两边相等,中间比两边的小),则海报个数=3 // 例子:如果楼高为1,2,3,4,1,则使用单调递增栈, // 栈中元素为1234时,此时1要进栈:4,3,2,1先出栈,1再进栈,所以使用5-1=4张海报 int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> d >> w; while (!s.empty() && w <= s.top()) { if (s.top() == w) { // 遇见相等的 ans++; } s.pop(); } s.push(w); } cout << n - ans; return 0; return 0; }