1 solutions
-
1
都知道这是单调栈的模板题,来说说单调栈
比如咱zx信奥队,新初一加入了,老师有一个
测试,分数比新来的要低的就踢出去
(纯打比方,咱zx没有这么残酷(~ ̄▽ ̄)~)
那么每一次有新来的,就比较栈里面的人有哪
些分数比他低,踢出去
因为每一次只会留下比新来的更强的,
所以可以证明栈内元素单调递增
看代码吧:
#include<bits/stdc++.h> using namespace std; int n; int a[3000005]={}; stack<int> s;//存下标 int p[3000005]={};//存答案倒序输出 signed main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=n;i>=1;i--){//反着来,逐渐压入 while(!s.empty()&&a[s.top()]<=a[i]) s.pop(); //队头的人比新来的弱就踢掉 if(s.empty()) p[i]=0;//一定要判断不然RE else p[i]=s.top(); s.push(i);//新来的入栈 } for(int i=1;i<=n;i++) cout<<((p[i]<=n)?p[i]:0)<<' ';//最后判断一次以防万一 return 0; }
- 1
Information
- ID
- 363
- Time
- 1000ms
- Memory
- 125MiB
- Difficulty
- 9
- Tags
- # Submissions
- 11
- Accepted
- 4
- Uploaded By