单调栈

单调栈查找左右较大值并记录位置

反向使用同理


 

#define int1 long long

a[n+2]//1-n存放数据,0和n+1作为边界
stack<int1> zuo,you;
zuo.push(0);
you.push(n+1);
int1 maxz[n+2],maxy[n+2];
for(int i=1;i<=n;i++){
    while(a[i]>a[zuo.top()]) zuo.pop();
    maxz[i]=zuo.top();
    zuo.push(i);
    //寻找左侧较大值,并记录位置在maxz

    while(a[n-i+1]>=a[you.top()]) you.pop();
    maxy[n-i+1]=you.top();
    you.push(n-i+1);
    //寻找右侧较大值,并记录在maxy
}

 

posted @ 2022-03-02 22:04  云憩风霞  阅读(82)  评论(0)    收藏  举报