返回题解分享
讨论 / 题解分享/ 帖子详情

单调队列 - 题解

#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef pair<int,int> aII;  
using ll = long long;
using ULL = unsigned long long;
const int N = 1e6+5;

int n, a[N], q[N];
int hh = 0, tt = -1;
inline void solve() { 
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    for(int i = 1;i <= n;i++) {
        while (hh <= tt && a[q[tt]] <= a[i]) --tt;
        q[++tt] = i;
    }
    for (int i = hh; i <= tt; i++) cout << a[q[i]] << ' '; 

}
int main() { 
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int _ = 1; 
    //int _; cin >> _;
    while (_--) solve();
    return 0;
}
0 回复 0 转发 0 喜欢 5 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!