BZOJ 1345[BOI]序列问题 - 贪心 + 单调栈
题解
真的没有想到是单调栈啊。 回想起被单调栈支配的恐惧
最优情况一定是小的数去合并 尽量多的数,所以可以维护一个递减的单调栈。
如果加入的数比栈首小, 就直接推入栈。
如果加入的数大于等于栈首, 必须要合并栈首,因为栈首两边都是大的数, 要选择小的那个进行合并, 需要进行$st[top - 1] 与 x$判断大小。
最后留下来的递减数列逐个合并就可以了
代码
#include<cstring>
#include<cstdio>
#include<algorithm>
#define rd read()
using namespace std; const int N = 1e6 + 1e5; int st[N], tp, n;
long long ans; int read() {
int X = , p = ; char c = getchar();
for(; c > '' || c < ''; c = getchar()) if(c == '-') p = -;
for(; c >= '' && c <= ''; c = getchar()) X = X * + c - '';
return X * p;
} int main()
{
n = rd;
for(int i = ; i <= n; ++i) {
int x = rd;
while(tp && st[tp] <= x) {
if(tp > && st[tp - ] < x) ans += st[tp - ];
else ans += x;
tp--;
}
st[++tp] = x;
}
while(tp > ) {
ans += st[--tp];
}
printf("%lld\n", ans);
}
BZOJ 1345[BOI]序列问题 - 贪心 + 单调栈的更多相关文章
- BZOJ_1345_[Baltic2007]序列问题Sequence_单调栈
		
BZOJ_1345_[Baltic2007]序列问题Sequence_单调栈 Description 对于一个给定的序列a1,…,an,我们对它进行一个操作reduce(i),该操作将数列中的元素ai ...
 - AcWing:131. 直方图中最大的矩形(贪心 + 单调栈)
		
直方图是由在公共基线处对齐的一系列矩形组成的多边形. 矩形具有相等的宽度,但可以具有不同的高度. 例如,图例左侧显示了由高度为2,1,4,5,1,3,3的矩形组成的直方图,矩形的宽度都为1: 通常,直 ...
 - 【BZOJ1345】[Baltic2007]序列问题Sequence 贪心+单调栈
		
[BZOJ1345][Baltic2007]序列问题Sequence Description 对于一个给定的序列a1, …, an,我们对它进行一个操作reduce(i),该操作将数列中的元素ai和a ...
 - 【HNOI2016】序列 莫队+单调栈+RMQ
		
Description 给定长度为n的序列:a1,a2,…,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,…,ar-1,ar.若1≤l≤s≤t≤r≤n,则称a ...
 - BZOJ 1012--[JSOI2008]最大数maxnumber(二分&单调栈)
		
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 14142 Solved: 6049[Subm ...
 - 【bzoj1345】[Baltic2007]序列问题Sequence  单调栈
		
题目描述 对于一个给定的序列a1, …, an,我们对它进行一个操作reduce(i),该操作将数列中的元素ai和ai+1用一个元素max(ai,ai+1)替代,这样得到一个比原来序列短的新序列.这一 ...
 - [bzoj1345][Baltic2007]序列问题_单调栈
		
bzoj-1345 Baltic-2007 序列问题 题目大意:对于一个给定的序列a1,…,an,我们对它进行一个操作reduce(i),该操作将数列中的元素ai和ai+1用一个元素max(ai,ai ...
 - BZOJ 3238: [Ahoi2013]差异 [后缀数组 单调栈]
		
3238: [Ahoi2013]差异 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2326 Solved: 1054[Submit][Status ...
 - bzoj 4826: [Hnoi2017]影魔 [主席树 单调栈]
		
4826: [Hnoi2017]影魔 题意:一个排列,点对\((i,j)\),\(p=max(i+1,j-1)\),若\(p<a_i,a_j\)贡献p1,若\(p\)在\(a_1,a_2\)之间 ...
 
随机推荐
- 网络文件系统与 Linux
			
网络文件系统 是文件系统之上的一个网络抽象,来允许远程客户端以与本地文件系统类似的方式,来通过网络进行访问.虽然 NFS 不是第一个此类系统,但是它已经发展并演变成 UNIX® 系统中最强大最广泛使用 ...
 - c++官方文档-模版函数和重载
			
#include<stdio.h> #include<iostream> #include<queue> #include<map> #include& ...
 - UVA439-水题
			
题意:一只棋盘上的马,从一个点到另外一个点要走多少步 解法:广搜 #include<stdio.h> #include<iostream> #include <strst ...
 - char数据类型,编程能用的最小数据类型.
			
关于数据类型, char占1bit,8bites. signed代表有符号,包括正负数,和0; unsigned代表无符号,只包括0和整数; signed和unsigned的主要区别就是它们的最高位是 ...
 - memcache.so的报错信息,未解决
			
memcache.so php版本5.6 executor_globals_id in Unknown on line 0 编译也成功了,路径也是在其他so文件的目录 但是加载失败的,查看apache ...
 - windows,linux,esxi系统判断当前主机是物理机还是虚拟机?查询主机序列号命令
			
参考网站:https://blog.csdn.net/yangzhenping/article/details/49996765 查序列号: http://www.bubuko.com/infodet ...
 - HTML5 通过文件输入框读取文件为base64文件, 并借助canvas压缩 FileReader, files, drawImage
			
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
 - leetcode929
			
package main import ( "fmt" "strings" ) func numUniqueEmails(emails []string) in ...
 - HTML 表格标签
			
<table border="1"> <tr> <td>row 1, cell 1</td> <td>row 1, ce ...
 - UI5-文档-4.30-Debugging Tools
			
虽然我们在前面的步骤中添加了一个基本的测试覆盖率,但是我们似乎不小心破坏了我们的应用程序,因为它不再显示价格到我们的发票上.我们需要调试这个问题,并在有人发现之前修复它. 幸运的是,SAPUI5提供了 ...