
单调队列
文章平均质量分 60
commonc
这个作者很懒,什么都没留下…
展开
-
BZOJ4382: [POI2015]Podział naszyjnika
题目大意:把一个长度为n的一串项链切两刀,把项链断成两条链。要求每种颜色的珠子只能出现在其中一条链中。求方案数量以及切成的两段长度之差绝对值的最小值。挺神的一道题,首先我们可以随便画一个项链玩一玩然后我们尝试对于每种颜色给每个分隔点标一个号,标号方式是让对于该种颜色没被分开的分隔点标上同一个号,被分开的标上不同的号,就像下图然后我们惊奇地发现,假如两个分隔点对于所有颜色原创 2016-05-10 08:25:04 · 2080 阅读 · 0 评论 -
BZOJ4385: [POI2015]Wilcze doły
题目大意:给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0。请找到最长的一段连续区间,使得该区间内所有数字之和不超过p。长度肯定为d啊,不用想!那就先算出以每个长度为d的总和g然后就相当于维护一个队列,每次在后面新加入一个数的时候,查询在这段区间内最大的g,看这些数总和减去这个最大值是否小于等于p,如果不是就说明太长了,得删掉队头这样原创 2016-05-10 10:04:21 · 1637 阅读 · 0 评论 -
BZOJ3521: [Poi2014]Salad Bar
题目大意:有一个长度为n的字符串,每一位只会是p或j。求一个最长子串,使得不管是从左往右还是从右往左取,都保证每时每刻已取出的p的个数不小于j的个数。首先先扫一遍得到以每个点为左端点,只考虑从左向右取,最远能取到哪,并标记每一个点最早被哪一个点扫到然后再从后往前扫一遍,开两个栈,一个记录当前仍符合条件的右端点,一个记录已经被扫过的左端点,每当有元素从第一个栈里弹出时,就在第二个栈里原创 2016-05-11 19:08:21 · 1465 阅读 · 0 评论 -
BZOJ3831: [Poi2014]Little Bird
题目大意:从1开始,跳到比当前矮的不消耗体力,否则消耗一点体力,每次询问有一个步伐限制,求每次最少耗费多少体力O(NQ)能过直接单调队列搞一下就好了#include#include#include#include#define MAXN 1100000using namespace std;int n,m,H[MAXN],f[MAXN],q[MAXN];int m原创 2016-05-13 09:06:35 · 880 阅读 · 0 评论 -
BZOJ2792: [Poi2012]Well
题目大意:给n个数,每个数可以减去一个非负整数,总修改代价为所有这些非负整数的和,求总代价在m之内且至少有一个数修改为0,max{|Xi - Xi+1|}的最小值先二分答案,然后对于每次的值求一个最小代价首先可以正反扫两遍求出每个点最大合法答案,在没有必须有0这个条件时,这个方案一定是最小的代价然后枚举0的位置,这样左右一定都是一个等差数列,这样对于每个数来说都对应一个区间,区间两个端原创 2016-06-30 15:20:45 · 871 阅读 · 0 评论 -
BZOJ2276: [Poi2011]Temperature
题目大意:给定n个区间,你可以为每个区间选定一个这个区间里的数,求最长不下降子串首先,一段子串[x,y]满足题意,当且仅当这段区间Li的最大值小于等于Ry并且[x,y-1]合法所以我们根据单调性可以想到一种做法,把I从1到n扫一遍,记录一个指针j,代表以i为起始的最远右端点,然后每次向右扩展的时候用线段树查询一下区间最大值判断可不可行于是TLE了然后改成RMQ,虽然还是O(原创 2016-07-06 15:44:00 · 1048 阅读 · 3 评论 -
BZOJ1136: [POI2009]Arc
题目大意(跟BZOJ上的不一样!!!):这是一道交互题!内存限制为32MB!先给你一个整数K(K要求你求出一个长度为K的字典序最大的子序列!这是一道非常厉害,非常有想法的交互题!但是BZOJ不支持交互,所以就变成了一个可以上来把所有数读进来再做的SB题朴素的做法是维护一个单调递减的栈,开始的n-k个直接推入栈中,最后k个每推进去一个元素就把栈底输出并删掉(其实像原创 2017-01-17 15:48:41 · 673 阅读 · 0 评论