【單調棧】【數據結構】JZOJ·奶牛的歌聲

在這裏插入圖片描述


思路:

建兩個單調棧一個從前往後,一個從後往前,如果棧頂比當前的牛高,就將當前牛丟進棧,遇到更高的就出棧,以此類推,最後取最大。


CodeCode:

#include <cstdio>
#include <iostream>

using namespace std;

int n,maxn,jl;
int ans1[50001],heig[50004],music[50004],jll[50001];
int main ()
{
	scanf ("%d", &n);
	for (int i = 1; i <= n; ++i) scanf("%d%d",&heig[i], &music[i]);
	for (int i = 1; i <= n; ++i)//模擬
	{
		while (jl && heig[i] > heig[jll[jl]])
		ans1[i] += music[jll[jl--]];
		jll[++jl] = i;
	}	
	jl = 0;
	for (int i = n; i >= 1; --i)
	{
		while (jl && heig[i] > heig[jll[jl]])
		ans1[i] += music[jll[jl--]];
		jll[++jl] = i;
	}
	for (int i = 1; i <= n; ++i)
	maxn = max (maxn, ans1[i]);
	printf("%d",maxn);
		return 0;
} 
發佈了240 篇原創文章 · 獲贊 26 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章