洛谷4755 Beautiful Pair (分治)】的更多相关文章

题目描述 小D有个数列 \(a\),当一个数对 \((i,j)(i\le j)\) 满足\(a_i\)和\(a_j\)的积 不大于 \(a_i \cdots a_j\) 中的最大值时,小D认为这个数对是美丽的.请你求出美丽的数对的数量. 输入格式: 第一行输入一个整数 \(n\),表示元素个数. 第二行输入 \(n\) 个整数 \(a_1,a_2,a_3,\cdots,a\),为所给的数列. 输出格式: 输出一个整数,为美丽的数字对数. 其中\(m\le 10^5,a_i \le 10^9\)…
正解:最大值分治 解题报告: 传送门$QwQ$ 昂考虑如果已经钦定了点$x$是这个$max$了,然后现在要求有多少对$[l,r]$满足$a_x=max\left\{a_i\right\},i\in[l,r]$,且$a_l\cdot a_r\leq a_x$ 现在枚举$l$,发现$r$就有一个范围了,就$a_r\leq \frac{a_x}{a_l}$,这个就可以用主席树维护下就成嘛$QwQ$(我开始想用树状数组的,,,然后想了下发现因为是分治所以每次树状数组都要重建复杂度是错的$kk$,所以还是…
题面传送门 wssb,我紫菜 看到这类与最大值统计有关的问题可以很自然地想到分治,考虑对 \([l,r]\) 进行分治,求出对于所有 \(l\le x\le y\le r\) 的点对 \((x,y)\) 的贡献之和.若 \(l=r\) 那只有 \(a_l=1\) 的情况会产生贡献,特判一下并直接返回即可.若 \(l\ne r\),我们假设 \([l,r]\) 中最大值的位置为 \(mid\),考虑将所有符合要求的点对分成三部分,一是 \(l\le x\le y<mid\),二是 \(mid<x…
好,这是一道三维偏序的模板题 当然没那么简单..... 首先谴责洛谷一下:可怜的陌上花开的题面被无情的消灭了: 这么好听的名字#(滑稽) 那么我们看了题面后就发现:这就是一个三维偏序.只不过ans不加在一起,而是加在每朵花内部. 很裸的一道CDQ分治,CDQ一维,sort一维,TreeArray一维,然后就爆0了...... 把cmp函数改完备之后还是爆0,为什么呢? 看一下这一组样例: 5 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 看得出来正确答案是1 0 0 0 4 但…
洛谷 P3806 传送门 这个点分治都不用减掉子树里的了,直接搞就行了. 注意第63行 if(qu[k]>=buf[j]) 不能不写,也不能写成>. 因为这个WA了半天...... 如果memset清空ex数组显然是会T的,所以开一个bef用来记录需要清空哪个地方. #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,m; ],to[],nx[],…
题目描述 给你一棵TREE,以及这棵树上边的距离.问有多少对点它们两者间的距离小于等于K 输入输出格式 输入格式:   N(n<=40000) 接下来n-1行边描述管道,按照题目中写的输入 接下来是k   输出格式:   一行,有多少对点之间的距离小于等于k   输入输出样例 输入样例#1:  7 1 6 13 6 3 9 3 5 7 4 1 3 2 4 20 4 7 2 10 输出样例#1:  5 题解:点分裸题,考虑分治中的暴力,将所有的重心子树中的点到中心的距离排序,对于一组l-r之间如果…
题目:https://www.luogu.org/problem/P3806 题意:一棵树,下面有q个询问,问是否有距离为k的点对 思路:牵扯到树上路径的题都是一般都是点分治,我们可以算出所有的路径长度然后保留下来,点分治无非就是几步一直递归,点分治就是在树上递归 1,找树的重心 2,算出所有点到重心距离,找出当前重心的所有合法路径 3,递归到子树 然后反复执行这三步 其实点分治唯一思考的地方就是  solve函数,其他都是一样的 https://www.cnblogs.com/guoshaoy…
喜闻乐见的CDQ分治被我搞的又WA又T..... 大致思路是这样的:把询问用二维前缀和的思想拆成4个子询问.然后施CDQ大法即可. 我却灵光一闪:树状数组是可以求区间和的,那么我们只拆成两个子询问不就行了?在统计的时候统计一个差值即可. 然后一交,自信40... 那么果然还是拆成4个吧...T了,60分. 然后放弃那个朴素的sort版CDQ,采用了归并,就A了. #include <cstdio> #include <algorithm> using namespace std;…
CF55D Beautiful numbers 题意 \(t(\le 10)\)次询问区间\([l,r](1\le l\le r\le 9\times 10^{18})\)中能被每一位上数整除的数的个数,0算可以整除任何数. 最开始写了个假做法,既没算0复杂度也是假的 最开始把每个模数都压进去了,后来发现只压2520就可以了 然后前两位压前\(i\)位与\(\bmod 2520\)的结果,第三位最开始压了每个数字出现集合,这样就很屑. 可以直接压数字集合的最小公倍数,仅有不到50个取值,做一个H…
分治 + 主席树. 设$solve(l, r)$表示当前处理到$[l, r]$区间的情况,我们可以找到$[l, r]$中最大的一个数的位置$mid$,然后扫一半区间计算一下这个区间的答案. 注意,这时候左半边是$[l, mid]$,而右区间是$[mid, r]$,我们在这个区间处理的时候要算完所有$mid$的情况,然后我们每一次分治的时候去处理$solve(l, mid - 1)$和$solve(mid + 1, r)$,要不然当$mid$是端点的时候就会无限递归下去. 问题转化快速算出一个区间…