单调栈
单调栈
- 直接用单调递增的栈来求出每一个点最近大于该点的值
- 用
k-y
来存该点下一个更大的值,遍历询问就行。最大矩形面积1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36#include <iostream>
#include <unordered_map>
#include <stack>
using namespace std;
const int maxn=1005;
int numa[maxn];
int numb[maxn];
unordered_map<int,int> ans;
stack<int> st;
int main() {
// freopen("a.txt","r",stdin);
int n,m;
cin>>n>>m;
for (int i=0;i<n;i++) cin>>numa[i];
int temp;
for (int i=0;i<m;i++) {
cin>>temp;
if ( st.empty() ) st.push(temp);
else {
// if ( temp > st.top() ) {
// ans[st.top()]=temp;
// st.pop();
// }
while ( !st.empty() && temp>st.top() ) {
ans[st.top()]=temp;
st.pop();
}
st.push(temp);
}
}
for (int i=0;i<n;i++) {
if( ans[numa[i]] > numa[i] ) cout<<ans[numa[i]]<<" ";
else printf("-1 ");
}
return 0;
} width+1
保证到第i
点时,从i-1
点开始向前计算时 加上了i
点的长度,计算矩形面积是不包括i
点
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!