【模板】单调栈

tech2024-03-16  62

前往:我自己搭建的博客

题目

洛谷P5788单调栈

题解

从左往右扫描序列,并维护一个栈,栈内的元素目前未找到比它大的。每次遇到新元素时,将栈内比它小的元素更新并出栈。

代码

#include <bits/stdc++.h> using namespace std; const int maxn=3e6+5; int n,num; int f[maxn]; stack<pair<int,int> > s; //下标/数值 inline int read() { int s=0; char ch=getchar(); while(ch<'0'||ch>'9') ch=getchar(); while(ch>='0'&&ch<='9') s=(s<<1)+(s<<3)+(ch^48),ch=getchar(); return s; } int main() { n=read(); for(int i=1;i<=n;i++) { num=read(); while(s.size()&&num>s.top().second) f[s.top().first]=i,s.pop(); //注意s.size要写在前面 s.push(make_pair(i,num)); } for(int i=1;i<=n;i++) printf("%d ",f[i]); return 0; }
最新回复(0)