单调栈

Toretto·2022-03-02 22:04·74 次阅读

单调栈

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

反向使用同理


 

复制代码
#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 @   云憩风霞  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示