单调栈,队列

何为单调栈?顾名思义,单调栈即满足单调性的栈结构。与单调队列相比,其只在一端进行进出

队列

P5788 【模板】单调栈

#include<bits/stdc++.h>
using namespace std;
const int N = 3e6 + 10;
int n;
int a[N];
stack<int> st;
int ans[N];

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	for (int i = 1; i <= n; i++) {
		while (st.size() && a[i] > a[st.top()]) {
			ans[st.top()] = i;
			st.pop();
		}
		st.push(i);
	}
	for (int i = 1; i <= n; i++) {
		cout << ans[i] << ' ';
	}
}

H - 阮梅女士的世纪难题

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+10;
int n;
int a[N];
signed main() {
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n;
	for(int i=1; i<=n; i++) {
		cin>>a[i];
	}
	stack<int> st;
	int mx=0;
	for(int i=1; i<=n; i++) {
		while(st.size()&&a[i]>=st.top()) {
			st.pop();
		}
		cout<<st.size()<<' ';
		mx=max(mx,(int)(st.size()));
		st.push(a[i]);
	}
	cout<<'\n'<<mx<<'\n';
}

P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6 + 10;
int cnt, sum;
int n, m;
deque<int> de;
int q[N];
priority_queue<int, vector<int>, greater<int>> t;

signed main() {
	cin >> n;
	int i;
	for (i = 1; i <= n; i++) {
		int x;
		cin >> x;
		t.push(x);
	}
	for (i = 1; i < n; i++) {
		int a, b;
		a = t.top();
		t.pop();
		b = t.top();
		t.pop();
		sum += a + b;
		t.push(a + b);
	}
	cout << sum << endl;
}

posted @ 2024-10-12 19:10  ZhangDT  阅读(20)  评论(0编辑  收藏  举报