luogu 3467 [POI2008]PLA-Postering 单调栈】的更多相关文章

luogu 1169 棋盘制作(单调栈/悬线) 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳.而我们的主人公小Q,正是国际象棋的狂热爱好者.作为一个顶尖高手,他已不满足于普通的棋盘与规则,于是他跟他的好朋友小W决定将棋盘扩大以适应他们的新规则.小Q找到了一张由N*M个正方形的格子组成的矩形纸片,每个格子被涂有黑白两种颜色之一.小Q想在这种纸中裁减一部分作为新棋盘,…
题目描述: Description N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们. Input 第一行给出数字N,代表有N个矩形.N在[1,250000] 下面N行,每行给出矩形的长与宽.其值在[1,1000000000]2 1/2 Postering Output 最少数量的海报数. 题解: 我们考虑按高度从小到大依次消去. 可以证明,如果当前块的高度最小,那么尽可能地向左右延申一定会得到最优解. 用单调栈维护连续的高度即可 Code: #include<bits/stdc…
BZOJ1113 Poi2008 海报PLA Description N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们. Input 第一行给出数字N,代表有N个矩形.N在[1,250000] 下面N行,每行给出矩形的长与宽.其值在[1,1000000000]2 1/2 Postering Output 最少数量的海报数. Sample Input 5 1 2 1 3 2 2 2 5 1 4 Sample Output 4 直接单调栈扫过去就可以了 注意合并高度相等的情况 #in…
题意 N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们. (n<=250000,wi,di<=109) 题解 这种一堆矩形,又不像数据结构的题,一般都是单调栈. 考虑一个贪心:对于一个高度,一定要取得尽量宽. 像这样: 然后我们用单调栈求出左边最后一个高度大于等于它的和右边最后一个高度大于等于它的,然后每一个不同的二元组给答案贡献1,用hash判一下重就行了. #include<iostream> #include<cstring> #include&l…
Code: #include<bits/stdc++.h> #define maxn 1000000 #define ll long long using namespace std; void setIO(string s) { string in=s+".in"; freopen(in.c_str(),"r",stdin); } int S[maxn],top,n; ll f[maxn],sumv[maxn],arr[maxn]; int main(…
hnoi 2016 标签:题解 莫队 考虑左端点左移以及右端点右移产生的贡献 这样就可以由 \([l, r]\) 转移到另外的 \(4\) 个区间 \(f_{l, r}\) 表示右端点在 \(r\), 左端点在 \([l, r]\) 内的答案,这个可以压掉一维 \(pre_{i}\) 表示 \(i\) 前面第一个比 \(a_{i}\) 小的数的位置 \(bhd_{i}\) 表示 \(i\) 后面第一个比 \(a_{i}\) 小的数的位置 考虑计算贡献 \(S\) 也就是右端点右移产生的贡献 显然…
[Poi2008]海报PLA Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1304  Solved: 896[Submit][Status][Discuss] Description N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们. Input 第一行给出数字N,代表有N个矩形.N在[1,250000] 下面N行,每行给出矩形的长与宽.其值在[1,1000000000]2 1/2 Postering Output 最少数量的海…
题目: 洛谷3467 分析: (ti jie shuo)这题是个单调栈经典题. 单调栈就是栈元素递增或递减的栈,这里只考虑递增.新元素入递增栈时,先将所有比它大的元素弹出,然后让新元素入栈,这样保证栈顶永远是最大的元素,代码如下:(\(a\)是新元素) while(top>0&&stack[top]>a)top--; stack[++top]=a; 然后来分析这道题.我这种蒟蒻乍一看一脸懵逼,但是可以注意到这样一个事实: 如果先让每个楼都贴一张海报(\(ans=n\)),如果两…
[luogu]P1169 [ZJOI]棋盘制作 ——!x^n+y^n=z^n 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳. 而我们的主人公小Q,正是国际象棋的狂热爱好者.作为一个顶尖高手,他已不满足于普通的棋盘与规则,于是他跟他的好朋友小W决定将棋盘扩大以适应他们的新规则. 小Q找到了一张由N*M个正方形的格子组成的矩形纸片,每个格子被涂有黑白两种颜色…
Description 给一个01矩阵, 求出最大的01交错的正方形和最大的01交错的矩阵 Solution 用动态规划求出最大的正方形, 用单调栈求出最大的矩阵. 在这里仅介绍求出最大正方形(求最大矩阵 = 单调栈裸题  传送门 : 不会单调栈的同学可以去学 定义数组$f[ i ][ j ]$ 为以$(i, j) $为右下角的正方形的边长 $up[ i ][ j ]$ 表示从点$(i, j)$往上 $01$交错的长度 $lef[ i ][ j ]$ 表示从点$(i, j)$往右$01$交错的长…
题目链接 唉……这种题放在NOIP以前我是会做的……但是为什么现在反而不会了…… 单调栈.预处理每个点向上能扩展的最大距离,左右用两遍单调栈扫一遍.注意边界. #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #include<cctype> using namespace std; inline long long read(){ ,f=; char…
题目链接 题目说明比自己矮的塔收不到自己的能量,摆明了就是单调栈呗. 把比自己矮的全都从栈里弹出去,于是碰到第一个比自己高的.让他接受自己发射的能量. 当然由于发射站发射的能量有两个方向,所以正反两遍. 然后 放代码. #include<cstdio> #include<cstdlib> #include<cctype> using namespace std; long long ans; inline long long max(long long a,long l…
题目链接 写代码能力需要极大提升.我在五分钟之内想到了单调栈,然后花了一个小时的时间去看我单调队列为啥写错了…… 首先这题需要转换自己的思维.枚举所有“最小点”,然后看它往左往右最大能扩展多少. 维护一个单调递增的序列,弹栈时就会是这种情况: 设被弹出去的元素是s,那它为什么会被弹出去呢?因为它比当前元素大. 比当前元素大说明了什么呢?说明如果有一个区间以它为最小值,那这个区间向右扩展的极限就在当前元素前面.因为区间不能继续向右扩展,一扩展,区间就包含当前元素了,那元素s就不是最小值了,而我们这…
题目:https://www.luogu.org/problemnew/show/P4660 https://www.lydsy.com/JudgeOnline/problem.php?id=1168 自己一开始有这样的想法:枚举一边的手套一定选到 S 集合,设 c = 选到 S 里每个手套的最小需要选的手套个数,则 c = 这边所有手套个数 - (S里个数最小的手套个数-1) . 设 ts = 另一边一定选到 S 集合里的至少一个手套的最小需要选的手套个数,则 ts = 不在 S 集合里的手套…
题目:https://www.luogu.org/record/show?rid=12702916 https://www.lydsy.com/JudgeOnline/problem.php?id=1168 一眼不可做...即使数据范围很小... #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long…
这位dalao的单调栈文章很棒!我写的是他的题单233. http://www.cnblogs.com/COLIN-LIGHTNING/p/8474668.html 一.单调栈的一般写法 ;i<=n;i++) { ; scanf("%d",&x); while(x>=sta[top]&&top) top--; sta[++top]=x; } 而各种各样繁杂的题目正是在这个基础上维护一些其他的信息. 二.注意事项 栈不能为空.要随时注意,否则RE. 计…
想了想决定把这几题也随便水个解题报告... bzoj  luogu 思路: 首先肯定得拆成二进制30位啊 此后每一位的就是个01矩阵 Q1就是全是1的矩阵个数 Q2就是总矩阵个数减去全是0的矩阵个数 玉蟾宫警告 就是单调栈乱搞对吧 本题完结 事实上有了思路其他的都是多余的对吧所以就不要介意代码了 #include<cstdio> #define mo 1000000007 ; template<typename tp>inline void read(tp &tar) {…
STL 一定要学好 一定要学好,一定要学好!!! 题目链接:https://www.luogu.org/problemnew/show/P1823 我们需要单向查找:用单调栈: 思路:维护一个身高单调递减的栈,如果下一个比上一个插入的矮,就直接进栈,如果现在插入的比上一个高,我们就要更新答案的值: 因为现在要插入的人会挡住前面比他矮的人,所以前面比他矮的人就不能再看见以后的人了: 当然还要记录前面和他一样高的人的个数,因为和他一样高的人是可以看见他后面的人的(题目中是大于没有等于) 因为我们维护…
思路:悬线法\(or\)单调栈 提交:2次 错因:正方形面积取错了\(QwQ\) 题解: 悬线法 讲解:王知昆\(dalao\)的\(PPT\) 详见代码: #include<cstdio> #include<iostream> #define ull unsigned long long #define ll long long #define R register int using namespace std; #define pause (for(R i=1;i<=1…
P2659 美丽的序列 题目链接 https://www.luogu.org/problemnew/show/P2659 题目描述 为了研究这个序列的美丽程度,GD定义了一个序列的"美丽度"和"美丽系数":对于这个序列的任意一个区间[l,r],这个区间的"美丽度"就是这个区间的长度与这个区间的最小值的乘积,而整个序列的"美丽系数"就是它的所有区间的"美丽度"的最大值.现在GD想要你帮忙计算这个序列的&quo…
题目:https://www.luogu.org/problemnew/show/P1233 题意: 有n根木棍,每根木棍有长度和宽度. 现在要求按某种顺序加工木棍,如果前一根木棍的长度和宽度都大于现在这根,那加工这一根就不需要准备时间,否则需要1分钟准备时间. 问最少的准备时间. 思路: 现在题目要同时维护两个单调不升序列的数目.对于一个属性显然可以通过排序保证他们是单调不升的. 只需在排好序之后求另一个属性的单调不升序列的个数. 这里需要知道Dilworth定理: 偏序集能划分成的最少的全序…
题目:https://www.luogu.org/problemnew/show/P1020 题意: 给定一些导弹的高度. 一个导弹系统只能拦截高度不增的一系列导弹,问如果只有一个系统最多能拦截多少导弹. 再问,如果要拦截所有导弹最少需要多少系统. 思路: 对于第一个问题其实就是找整个序列中的最长不升子序列. 对于第二个问题就是找整个序列中的最长上升子序列.因为当有一个高度大于前面的高度时一个系统就搞定不了了. 最长上升子序列用动态规划是可以做的,但是这题会卡. $O(N^2)$的动规做法是,$…
先上一波题目 https://www.luogu.org/problem/P1198 题目要求维护后缀最大值 以及在数列的最后面添加一个数 这道题呢我们有两种做法 1.单调栈 因为只需要维护后缀最大值 而我们每次插入都是在最后面添加一个数 所以我们可以维护一个单调栈 栈底到栈顶逐渐增大 因为如果一个数他的位置在你的前面且他比你小 那么他便不会对前面位置的最大值产生影响 可以直接省略 我们在查询的时候只需要二分一下答案 找到比查询位置后的最接近查询位置的数的值就是答案了 #include<cstd…
[FZYZ P1280 ][NOIP福建夏令营]矩形覆盖 Description 有N个矩形,矩形的底边边长为1,且均在X轴上,高度给出,第i个矩形的高为h[i],求最少需要几个矩形才能覆盖这个图形. 例如h = [3, 2, 4, 2]的图形如下: 容易发现,只需要3个矩形就能覆盖这个图形. Input Format 第一行一个整数N.接下来1行包含N个正整数,为h[i]. Output Format 输出一个整数表示最少需要几个矩形能覆盖这个图形. Sample Input 10 2 3 2…
https://www.luogu.org/problem/P2947 题目描述 Farmer John's N (1 <= N <= 100,000) cows, conveniently numbered 1..N, are once again standing in a row. Cow i has height Hi (1 <= Hi <= 1,000,000). Each cow is looking to her left toward those with high…
题面 传送门:https://www.luogu.org/problemnew/show/P3469 Solution 先跟我大声念: poi! 然后开始干正事. 首先,我们先把题目中的点分为两类:去除这个点能把图分为几个部分的,去除这个点不影响整个图的连通性的. 如下图: 点上的数字表示这个点的搜索序. 我们称这些对连通性有影响的点为割点. 先假设我们能求出这些点以及其出去后把图分为几块之后那几块分别的大小. 是不是发现了什么? 对于非割点,答案显然是2*(n-1) (因为它不能影响别的点对连…
题目链接: https://www.luogu.org/problemnew/show/P1198 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:LL不超过当前数列的长度.(L > 0)(L>0) 2. 插入操作. 语法:A n 功能:将nn加上tt,其中tt是最近一次查询操作的答案(如果还未执行过查询操作,则t=0t=0),并将所得结果对一个固定的常数DD取模,将所得答案插入到数…
正题 题目链接:https://www.luogu.com.cn/problem/T183637 题目大意 给出\(n\)个二元组\((x_i,y_i)\),求最大的 \[|x_i-x_j|\times min\{|y_i|,|y_j|\} \] \(1\leq n\leq 2\times 10^6,-10^6\leq x_i\leq 10^6,-10^9\leq y_i\leq 10^9,1\leq T\leq 10\) 解题思路 昨天出去了所以没打比赛,这个算法是那个时候口胡的. 首先时间复…
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 8748  Solved: 3835[Submit][Status][Discuss] Description 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2. 插入操作.语法:A n 功能:将n加上t,其中t是最近一次查询…
4453: cys就是要拿英魂! Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 90  Solved: 46[Submit][Status][Discuss] Description pps又开始dota视频直播了!一群每天被pps虐的蒟蒻决定学习pps的操作技术,他们把pps在这局放的技能记录了下 来,每个技能用一个字符表示.经过研究,蒟蒻们发现字典序更大的连招威力更大.于是所有蒟蒻都想学习pps最 强的连招.但是他们太弱了,不能学会整个视频里的…