单调栈
WerKeyTom_FTD
我是一只来自中山纪念中学高三的oier,请多多指教
展开
-
五校联考六T2
题目大意对于1 ≤ i ≤ N,给定ai。 f(i, j) (i ≤ j) 表示下标属于[i, j] 的数组成的集合中,最大元素的下标;如果有多个最大元素,取位置靠前的。 ans_k = |{(i, j) | f(i, j) = k}| 即满足f(i, j) = k 的有序数对(i, j) 的个数。单调栈单调栈正扫一遍反扫一遍,便可知每个位置往左与往右最远拓展位置,用乘法原理算出答案即可。原创 2015-10-06 16:53:36 · 606 阅读 · 0 评论 -
[arc081f]Flip and Rectangles
前言一开始想如何染色成功。 发现只需要讨论四元环。 然后发现可以直接把规模缩成2*2矩阵。题目大意一个黑白网格图,你可以翻转任意行和任意列的颜色,求以此得到网格图最大黑色子矩阵面积。做法结论是一个矩阵如果任意一个2*2子矩阵都有偶数个黑色,一定可以通过翻转操作扭转为全黑。 易证必要充分。 然后就可以做经典问题。#include<cstdio>#include<algorithm>#def原创 2017-11-03 09:37:14 · 542 阅读 · 0 评论 -
字符串游戏
题目大意题解瞎猜想和画图得到一个不好说的结论。 用诡异的单调栈做。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;const int maxn=1000000+10;char a[max原创 2017-06-22 20:16:12 · 634 阅读 · 0 评论 -
装箱
题目大意n个箱子,每个都有三个属性(a,b,c),可以任意调换属性顺序。 一段区间的价值定义为任意调换后max(a)*max(b)*max(c)的最小值。 求所有区间价值和。结论把所有箱子的三个属性按降序排列,一定最优。 考虑找到了全局最大值mx,把mx调到第一维,接下来第一维答案一定是mx,而其他箱子也一定会将自己的最大值调到第一维,第二维也同理。瞎做对三维维护单调栈。 维护线段树,位置l原创 2017-07-11 14:16:34 · 384 阅读 · 0 评论 -
[JZOJ5133][SDOI省队集训2017]重建
题目描述傻逼题预处理每个图里经过k条边的最短路。 然后可以用单调栈求出一些关键的c值使得某副图改变最短路经过的边数。 接着顺序扫这些关键点,解方程即可。#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--原创 2017-06-03 22:34:53 · 672 阅读 · 0 评论 -
[JZOJ5714]矩阵
题目大意求01网格图多少面积>=k的矩阵全0。做法预处理每个点往上延伸的长度up[i,j]。 对于每一行,我们顺序扫并维护单调栈。 弹出元素时考虑贡献。 假如弹出第k列,做到第l列,栈中上一个位置在第j列。 则得到一个高为up[i,k],长为l-j-1的矩形。 在这个矩形里求面积>=k的全0子矩阵个数(下边界必须是i)。 为了不计重,这个子矩阵的高要>max(up[i,j],up[i,l原创 2017-06-16 15:59:42 · 503 阅读 · 0 评论 -
稻草人
题目描述YLOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典。 有一次,YLOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地。和启示中的一样,田地需要满足以下条件: 1、田地的形状是边平行于坐标轴的长方形; 2、左下角和右上角各有一个稻草人; 3、田地的内部(不包括边界)没有稻草人。 给出每个稻草人的坐标,请你求出有多少遵从启示的田地的个数分治按x坐标原创 2017-01-12 20:57:11 · 643 阅读 · 0 评论 -
[bzoj1127]KUP
题目大意给一个n*n的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k]做法首先先排除掉单点的情况,即如果存在一个位置权值是[k,2k]直接输出,接下来所有权值都不在[k,2k]内。 这种情况下,如果有>2k的点,矩形和显然不可能在[k,2k],因此矩形不能包含>2k的点,所以矩形只能包含<k<k的点。 假如找出一个矩形只包含<k<k的点,且和>=2k,我们一定能找出它的一个原创 2017-01-16 21:21:51 · 630 阅读 · 0 评论 -
[WerKeyTom_FTD的模拟赛]永恒的契约
某蒟蒻WerKeyTom_FTD的模拟赛第一题《永恒的契约》原创 2016-11-03 20:37:05 · 1263 阅读 · 0 评论 -
[CF5E/51nod 1482]部落信号
题目大意给出一个环,环上两点能互相看到的定义是,两条圆弧中任意一条圆弧中间的所经点权值均不大于两点中权值的较小值。 有多少点对能互相看到?破环为链找到权值最大的点,然后直接删去它,转为链做。 假如存在i,j能互相看到,且i,j权值均小于权值最大点,则一定不可能通过经过该点的圆弧互相看到。 如果权值等于权值最大点,显然走另一条圆弧也可以互相看到,因此可以删去一个权值最大的点转为链做。 然后考虑原创 2016-09-12 21:36:06 · 1075 阅读 · 1 评论 -
[bzoj3223]文艺平衡树
题目大意维护序列。 需要兹瓷区间翻转。treap大法好嘿嘿嘿裸题。 注意遍历treap的时候也要down标记啊!#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=100000+10;int left[maxn],right[ma原创 2016-04-06 20:02:48 · 653 阅读 · 0 评论 -
最大子矩阵
题目描述我们将矩阵A中位于第i行第j列的元素记作A[i,j]。一个矩阵A是酷的仅当它满足下面的条件: A[1,1]+A[r,s]<=A[1,s]+A[r,1](r,s>1)A[1,1]+A[r,s]<=A[1,s]+A[r,1](r,s>1) 其中r为矩阵A的行数,s为矩阵A的列数。 进一步,如果一个矩阵是非常酷的仅当它的每一个至少包含两行两列子矩阵都是酷的。 你的任务是,求出原创 2016-03-09 19:26:48 · 601 阅读 · 0 评论 -
[arc067f]Yakiniku Restaurants
题目大意不想讲。做法大概是需要知道如何给一个区间包含的所有区间打加法tag。 给[l,r]包含的所有区间+d,可以令v[l,r]+d。 最终做一遍v[l,r]+=v[l-1,r]+v[l,r+1]-v[l-1,r+1]。 容易讨论这是对的。 这题做m次,建关于最大值的笛卡尔树,那么每次相当于一个区间包含的区间中包含某个位置的可以加多少,可以转化为三个包含区间加法。#include<cstdi原创 2017-11-15 21:43:47 · 683 阅读 · 0 评论