大意: n*n棋盘, n个点有怪兽, 求有多少边长为k的正方形内恰好有k只怪兽, 输出k=1,...,n时的答案和. 等价于给定n排列, 对于任意一个长为$k$的区间, 若最大值最小值的差恰好为k, 则产生1贡献, 求贡献和.考虑分治, 问题就转化为如何$O(n)$求出跨越$mid$的贡献, 可以讨论最大值最小值的位置, 双指针求出. #include <iostream> #include <algorithm> #include <cstdio> #define R…
In this problem you will meet the simplified model of game Pudding Monsters. An important process in developing any game is creating levels. A game field in Pudding Monsters is an n × n rectangular grid, n of its cells contain monsters and some other…
[CF526F]Pudding Monsters 题意:给你一个排列$p_i$,问你有对少个区间的值域段是连续的. $n\le 3\times 10^5$ 题解:bzoj3745 Norma 的弱化版.直接cdq分治,考虑最大值和最小值分别在左右两边的情况.这里就当练练手了. #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespac…
F. Pudding Monsters time limit per test 2 seconds memory limit per test 256 megabytes In this problem you will meet the simplified model of game Pudding Monsters. An important process in developing any game is creating levels. A game field in Pudding…
In this problem you will meet the simplified model of game Pudding Monsters. An important process in developing any game is creating levels. A game field in Pudding Monsters is an n × n rectangular grid, n of its cells contain monsters and some other…
CF526F Pudding Monsters 题目大意:给出一个\(n* n\)的棋盘,其中有\(n\)个格子包含棋子. 每行每列恰有一个棋子. 求\(k*k\)的恰好包含\(k\)枚棋子的子矩形个数. 比较有意思的一道分治题目. 首先我们将所有棋子归位 设\(sum_i\)表示第\(i\)行的棋子在第\(sum_i\)列 那么\(sum\)数组就一定是一个排列 而题目就可以转化为 这个排列中有多少个区间的值域是连续的 我们考虑分治解决,每次考虑夸\(mid\)的答案个数 我们提前预处理出\(…
CF526F Pudding Monsters 传送门 模型转换:对于一个 \(n\times n\) 的棋盘,若每行每列仅有一个棋子,令 \(a_x=y\),则 \(a\) 为一个排列. 转换成排列过后问题即变为:给定一个排列,求有多少个区间满足 \(\max-\min=r-l\). 然后我突然发现原来模拟赛好像考过这玩意.好像是用单调栈加线段树维护. 然后我发现我完全不懂(看来是当时对着题解抄的) 事实上枚举右端点维护 \(\max-\min-\operatorname{len}\) 即可.…
考场上没有认真审题,没有看到该题目的特殊之处: 保证每一行和每一列都恰有一只军队,即每一个Xi和每一个Yi都是不一样 的. 于是无论如何也想不到复杂度小于$O(n^3)$的算法, 只好打一个二维前缀和草草了事. 所以还是要仔细审题. $O(n^2)$算法: 因为每行上只有一个军队,每列上仅有一个军队, 我们发现一个性质,如果记录上每行军队的列数,设h(x)表示第x行军队所在列, 一个$x->y$方案是合法的当且仅当$y-x=max(h(i))-min(h(i))$   $i \in [x,y]$…
先把题目抽象一下: 有一个静态的数组,求有多少个区间[i,j]满足:j-i==max{ai,...,aj}-min{ai,...,aj} 也就是要求max-min+i-j==0的区间数 所以肿么做呢? 首先枚举i(这里倒着做,比较好理解),维护以i为开头的所有区间 相当于每次要在一坨区间的最前面同时加一个元素(并且增加一个仅含有ai的区间[i,i]) 然后很惊喜的发现实际上对于这一坨区间的权值(max-min+i-j)只有以下几个操作: 1.同时-1,因为i减小了1 2.改max(这个一定只有有…
题目传送门 题目描述 由于各种原因,桐人现在被困在Under World(以下简称UW)中,而UW马上要迎来最终的压力测试——魔界入侵.唯一一个神一般存在的Administrator被消灭了,靠原本的整合骑士的力量 是远远不够的.所以爱丽丝动员了UW全体人民,与整合骑士一起抗击魔族.在UW的驻地可以隐约看见魔族军队的大本营.整合骑士们打算在魔族入侵前发动一次奇袭,袭击魔族大本营!为了降低风险,爱丽丝找到了你,一名优秀斥候,希望你能在奇袭前对魔族 大本营进行侦查,并计算出袭击的难度. 经过侦查,你…
Codeforces 题目传送门 & 洛谷题目传送门 u1s1 这题数据范围有点迷惑啊--乍一看 \(\mathcal O(nm)\) 过不去,还以为是正解是 \(\mathcal O(n+m^2)\) 呢. 考虑 \(dp\),设 \(f_i\) 表示用前 \(i\) 个布丁,并且第 \(i\) 个布丁要么不动,要么向左移动能够覆盖的最多特殊格子数,再设 \(g_i\) 表示前 \(i\) 个布丁,并且第 \(i\) 个布丁的位置不发生变化所能覆盖的最多特殊格子数. 想好了 \(dp\) 状态…
题意简述 开始有无限长的一段格子,有n个格子种有布丁怪兽,一开始连续的布丁怪兽算一个布丁怪兽. 每回合你可以将一个布丁怪兽向左或右移动,他会在碰到第一个布丁怪兽时停下,并与其合并. 有m个特殊格子,询问最终你最多可以让几个特殊的格子上被布丁覆盖. 题解思路 dp f[i]表示前i个布丁最多可覆盖的特殊格子数 g[i]表示前i个布丁,第i个不动的情况下最多可覆盖的特殊格子数 可得转移方程: g[i] = max(g[i], f[l[i - len] - 1] + sum(b[j], a[i]));…
题面 [正解] 一眼分治 哎\(O(N^2)\)有50分,先敲了 等下,由于最大的数或进去了,所以有\(g(T) \geq f(T)\) 也就是说,我们用\(n \times (n-1) /2\)算出总数,再减去\(g(T) = f(T)\)的就可以了 我们套路地分治,每次统计左端点在左半边,右端点在右半边的种数 设\(f(i)\)表示当前点到中间分割点的最大值,\(g(i)\)表示当前点到中间分割点的或和 然后两边分开统计 发现\(f\)往两边是单调的,\(g\)不仅是单调的,靠内的还一定是靠…
大意: 给定$n$个平面上互不相交的矩形. 若一个矩形区域只包含一个矩形或者它可以水平或垂直切成两块好的区域, 那么这个矩形区域是好的. 求判断整个平面区域是否是好的. 分治判断, 可以用链表实现删除元素, 或者直接用$set$ #include <iostream> #include <sstream> #include <algorithm> #include <cstdio> #include <cmath> #include <se…
大意: 给定字符串$a$,$b$, $b$可以任选一段连续的区间删除, 要求最后$b$是$a$的子序列, 求最少删除区间长度. 删除一段连续区间, 那么剩余的一定是一段前缀和后缀. 判断是否是子序列可以用序列自动机, 最后双指针合并前缀与后缀的答案. #include <iostream> #include <sstream> #include <algorithm> #include <cstdio> #include <math.h> #in…
题意:给你一个01矩阵,问此矩阵有多少个和恰好为k的子矩形. 思路:分治,对于当前矩形,用一条中线把矩形分成两半,分治之后计算跨过中线的矩形个数.更具体的来说(假设划了一条水平中线),我们枚举矩形左右边界,然后用指针维护一下到中线的连续和为k的边界.之后通过差分就可以计算出对应的左右边界的矩形的贡献数目.对于一个n * m的矩阵,计算贡献的时间复杂度是O(n * (m * k + n))的,带有n * n项,所以计算的时候需要用交替画水平线和竖直线,不然就超时了.总复杂度O(n * m * k…
题意: 给你一个排列pi,问你有对少个区间的值域段是连续的. n≤3e5 题解: bzoj3745…
题意: 构造一个无向图,使得无向图里的所有点的度数 所组成的集合 即为给出的几个数 解析: 题中的数是以上升的顺序给出的, 我们对于dn+1个数进行处理,对于当前数i,有两个操作 1.向后边的所有点连边 称为主动连边 2.跳过该数 即不向后边的点连边,称为被动连边 设tot = dn+1, l = 1, r = n,ready 为对于当前点i前面的主动连边的点的数量 如果ready + tot - i == d[r] (即前面的点向它连的边 加上 当前点向后边的点连的边(即为总点数减去当前点的下…
E. Maximize! time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output You are given a multiset S consisting of positive integers (initially empty). There are two kind of queries: Add a positive int…
题目大意:有一个长度为$2\times 10^5$的板,有$n(n\leqslant 10^5)$个格子$a_1,\dots,a_n$有布丁怪兽,一开始连续的怪兽算一个怪兽,有$m(m\leqslant 2000)$个特殊点$b_1,\dots,b_n$,你可以向左或向右移动怪兽,它会在碰到第一怪兽时停下,并成为一个怪兽.最左边和最右边的怪兽向两边移动会掉出板.问最多可以让布丁怪兽压到几个特殊点. 题解:先把连续的布丁怪兽看做长度个不同的怪兽,令$f_i$表示前$i$个怪兽最多可以覆盖多少个点,…
洛谷 Codeforces 根号分治真是妙啊. 思路 考虑对于单独的一个\(k\)如何计算答案. 与"赛道修建"非常相似,但那题要求边,这题要求点,所以更加简单. 在每一个点贪心地把子树升上来的两条最长的链拼在一起,能组就组,否则把最长链往上送,复杂度\(O(n)\). 那么多个\(k\)怎么办呢? 分析一波,\(k<\sqrt{n}\)时可以暴力计算,而\(k>\sqrt{n}\)时\(ans_k\leq \lfloor \frac{n}{k}\rfloor\),只有\(…
1. CF 438D The Child and Sequence 大意: n元素序列, m个操作: 1,询问区间和. 2,区间对m取模. 3,单点修改 维护最大值, 取模时暴力对所有>m的数取模. 因为取模后至少减半, 复杂度$O(nlognlogC)$ 2. CF 431E Chemistry Experiment 大意: n个试管, 第$i$个试管有$a_i$单位水银, m个操作: 1, 修改$a_x$改为$v$. 2, 将$v$单位水倒入试管, 求一种方案使得有水的试管水银与水总量的最大…
(来源:XJ高质量原创题) 原题地址 弱化版:CF526F Pudding Monsters 弱化版 题意:\(n\times n\) 的棋盘上有 \(n\) 颗棋子,每行每列都有且仅有一颗棋子,求出有多少个 \(k\times k\) 的子棋盘也满足每行每列只有一颗棋子. 将棋盘的 \(x\) 轴看作上一题中每个点的下标,\(y\) 轴看作这个点的权值. 其实就是树退化为了链,而 \(m=1\) 的情况. 题意 给定一棵树,每一个点有一个权值 \(a_i\) ,\(\{a\}\) 构成一个排列…
E. Ciel the Commander Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.codeforces.com/contest/322/problem/E Description Now Fox Ciel becomes a commander of Tree Land. Tree Land, like its name said, has n cities connected by n - 1 undirected ro…
原文链接http://www.cnblogs.com/zhouzhendong/p/8847145.html 题目传送门 - CodeForces 553E 题意 一个有$n$个节点$m$条边的有向图,每条边连接了$a_i$和$b_i$,花费为$c_i$. 每次经过某一条边就要花费该边的$c_i$. 第$i$条边耗时为$j$的概率为$p_{i,j}$. 现在你从$1$开始走到$n$,如果你在$t$单位时间内(包括$t$)到了$n$,不需要任何额外花费,否则你要额外花费$x$. 问你在最优策略下的…
原文链接http://www.cnblogs.com/zhouzhendong/p/8835443.html 题目传送门 - CodeForces 958F3 题意 有$n$个球,球有$m$种颜色,分别编号为$1\cdots m$,现在让你从中拿$k$个球,问拿到的球的颜色所构成的可重集合有多少种不同的可能. 注意同种颜色球是等价的,但是两个颜色为$x$的球不等价于一个. $1\leq n\leq 2\times 10^5,\ \ \ \ \ 1\leq m,k\leq n$. 题解 来自Hel…
链接:https://codeforces.com/contest/161/problem/D 题意:给一个树,求距离恰好为$k$的点对是多少 题解:对于一个树,距离为$k$的点对要么经过根节点,要么跨过子树的根节点,于是考虑树分治 用类似poj1741的想法,可以推出: 对于任意一棵子树,其根节点记为$C$,其子树中: 记距离$C$距离之和为$k$的点对数量$S_{c}$ 记$C$儿子节点$C_1...C_n$的子树中,距离$C_i$距离为$k-2$的点对数量为$S'_{c_i}$ 其符合条件…
洛谷 Codeforces 思路 看到树上路径的统计,容易想到点分治. 虽然只有一个限制,但这个限制比较麻烦,我们把它拆成两个. 设黑边有\(a\)条,白边有\(b\)条,那么有 \[ 2a\geq b\\ 2b\geq a \] 合并两条边时,设原有的是\((a,b)\),要加入的是\((A,B)\),那么有 \[ 2(a+A)\geq b+B \Leftrightarrow 2A-B\geq b-2a\\ 2(b+B)\geq a+A \Leftrightarrow 2B-A\geq a-2…
洛谷 Codeforces 思路 一开始想到莫队+bitset,发现要T. 再想到分块+bitset,脑子一抽竟然直接开始写了,当然也T了. 最后发现这就是个裸的CDQ分治-- 发现\(a\)不变,可以处理出每个数在\(a\)中的位置\(pos\). 然后处理出\(aa_i=pos_{b_i}\),交换时就是\(swap(aa_x,aa_y)\). 把每个位置看成\((i,aa_i)\)的点,查询\(l1,r1,l2,r2\)时就是查以\((l2,l1)\)为左下角,\((r2,r1)\)为右上…
洛谷 Codeforces 简单的CDQ分治题. 由于对话要求互相看见,无法简单地用树套树切掉,考虑CDQ分治. 按视野从大到小排序,这样只要右边能看见左边就可以保证互相看见. 发现\(K\)固定,那么左右按智商排序.位置离散化之后可以\(two\;pointers\)一下,套个树状数组,就做完了. 由于复杂度瓶颈在树状数组,没必要归并,可以直接\(sort\). 复杂度应该是\(O(n\log^2 n)\). #include<bits/stdc++.h> namespace my_std{…