题意: 一条线段上有n张骨牌(n=1e7), 相邻骨牌距离为1,每张骨牌有其高度和推倒的花费,问最少的花费推倒所有的骨牌。 题解: 首先用单调栈维护每个位置往左(右)推能推倒的最远的骨牌 dp[i]表示1-i倒下的最小花费 转移显然只有两种 一种是第i张往左推动 另一种是找到往右推动能推倒i的最小花 ...
分类:
其他好文 时间:
2020-01-26 16:02:35
阅读次数:
75
2020-01-23 19:39:26 问题描述: 问题求解: public int maxWidthRamp(int[] A) { Stack<Integer> stack = new Stack<>(); int res = 0; int n = A.length; for (int i = 0 ...
分类:
其他好文 时间:
2020-01-23 21:19:19
阅读次数:
93
笛卡尔树是一棵二叉树,每个节点的编号满足二叉搜索树的性质,即二叉树的中序遍历是原数列,每个节点的权值满足堆的性质,也就是说,$Treap$就是笛卡尔树 在笛卡尔树上两个点的$LCA$就是这一区间的最值 用增量法来建树,维护一个单调栈,栈内元素为右子树链 因为每个节点最多进栈出栈一次,所以时间复杂度是 ...
分类:
其他好文 时间:
2020-01-22 23:59:33
阅读次数:
124
单调递增栈:栈顶到栈底为递增,数据出栈的序列为单调递增序列 单调递减栈:栈顶到栈底为递减,数据出栈的序列为单调递减序列 栈内可存储下标,也可存储元素 $code :$ ...
分类:
其他好文 时间:
2020-01-22 22:10:28
阅读次数:
70
给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。 输入格式 第一行包含整数N,表示数列长度。 第二行包含N个整数,表示整数数列。 输出格式 共一行,包含N个整数,其中第i个数表示第i个数的左边第一个比它小的数,如果不存在则输出-1。 数据范围 1≤N≤1051≤N≤ ...
分类:
其他好文 时间:
2020-01-21 18:10:51
阅读次数:
57
[HAOI2016]找相同字符(后缀数组+单调栈) 题面 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数。两个方案不同当且仅当这两个子串中有一个位置不同。 分析 我们把两个字符串接在一起,中间加一个分隔符。如$\text{AABB}$和$\text{BBAA}$变成$\t ...
分类:
编程语言 时间:
2020-01-21 13:36:40
阅读次数:
79
单调栈是自底向上单调递增或递减的栈。实现方法也很直接,当需要入栈的数违背了单调栈的性质,则持续出栈直到性质满足再入栈。 例题:POJ3250 http://poj.org/problem?id=3250 #include<cstdio> #include<iostream> #include<sta ...
分类:
其他好文 时间:
2020-01-19 09:47:59
阅读次数:
62
基于递推,写起来更快 for(int i=1;i<=n;i++) scanf("%I64d",&a[i]),l[i]=r[i]=i; a[0]=0; for(int i=2;i<=n;i++){ int now=i; while(now>1&&a[i]<=a[now-1]) now=l[now-1] ...
分类:
其他好文 时间:
2020-01-19 00:15:31
阅读次数:
61
"T1" $n \le 5 \times 10^5 , a_i \le 10^8$ 今天就临时测了这么一道题。 考场上用单调栈水了70分,结果那30分还是因为少取模(捂脸) 正解是分治,先计算左半部分,再计算右半部分,跨区间的:在左区间用一个指针从右向左枚举,右边用一个j,k, 表示能在左区间取到最 ...
分类:
其他好文 时间:
2020-01-16 21:49:09
阅读次数:
52
问题描述 Freda 学习了位运算和矩阵以后,决定对这种简洁而优美的运算,以及蕴含深邃空间的结构进行更加深入的研究。 对于一个由非负整数构成的矩阵,她定义矩阵的 $\texttt{AND}$ 值为矩阵中所有数二进制 $\texttt{AND(&)}$ 的运算结果;定义矩阵的 $\texttt{OR} ...
分类:
其他好文 时间:
2020-01-12 00:29:47
阅读次数:
115