BZOJ 3745: [Coci2015]Norma(分治)】的更多相关文章

题意 给定一个正整数序列 \(a_1, a_2, \cdots, a_n\) ,求 \[ \sum_{i=1}^{n} \sum_{j=i}^{n} (j - i + 1) \min(a_i,a_{i+1},\cdots,a_j) \max(a_i,a_{i+1},\cdots,a_j) \pmod {10^9} \] \(n \le 5\times 10^5, a_i \le 10^9\) 题解 对于这种求一段区间内所有子区间答案和的东西,我们常常可以考虑分治解决. 通常思路是这样的: 假设我…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3745 如果分治,就能在本层仅算过 mid 的区间了. 可以从中间到左边地遍历左边,给右边两个指针,表示第一个更新左边造成的最小值/最大值的位置. 两个位置共同的左边可以公式算长度,用左边的最值算:两个位置共同的右边可以预处理,处理出 算上长度(相对mid的)的最值乘积求和 与 不算长度的最值乘积求和(都是前缀),把前者加到答案里,后者乘上左边到mid的长度加到答案里即可:两个位置夹着的位置…
参考:https://blog.csdn.net/lych_cys/article/details/51203960 真的不擅长这种-- 分治,对于一个(l,r),先递归求出(l,mid),(mid+1,r),然后这个区间对答案贡献的就是经过mid的区间 我们先预处理出mid为l的右端点的mx*mn*len的前缀和与mx*mn的前缀和,然后枚举左端点,右端点维护两个下标j,k,分别表示mn和mx在左端点时的合法右端点 然后分三种情况处理,假设j<k 1.右端点在(mid+1,j)时,直接计算 2…
Description Solution 考虑分治: 我们要统计跨越 \(mid\) 的区间的贡献 分最大值和最小值所在位置进行讨论: 设左边枚举到了 \(i\),左边 \([i,mid]\) 的最大值为 \(mx\),最小值为 \(mn\) 1.最大值最小值都在左边:\(\sum_{j=mid+1}^{p}mx*mn*(j-i+1)\),可以用等差数列直接算出 2.最大/小值有一个在左边 \(\sum_{j=p}^{q}mx*Mx[j]*(j-i+1)\) 我们可以拆成 \(\sum_{j=p…
Description Input 第1行,一个整数N: 第2~n+1行,每行一个整数表示序列a. Output 输出答案对10^9取模后的结果. Sample Input 4 2 4 1 4 Sample Output 109 [数据范围] N <= 500000 1 <= a_i <= 10^8 Solution 这题目好麻烦 考虑所有子区间问题的贡献可以考虑分治 假设当前到达 \(l,r\) 区间,计算跨过 \(mid\) 的贡献 一个指针 \(x\) 从 \(mid\) 往 \(…
链接 bzoj 思路 首先\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}\sum\limits_{k=i}^{j}max(a_k)\)可以用单调队列求解.参见? 求解此题目,我们分治.计算\([l,mid]\)对\([mid+1,r]\)的贡献. 我们从后向前枚举\(mid\)到\(l\),定义为\(x\).(\(A\)为\([x,mid]\)中的最小值,\(B\)为\([x,mid]\)中的最大值) 得到\(p\)(\([mid+1,r]\)中大于等于…
题意 题目链接 分析 考虑分治,记当前分治区间为 \(l,r\) . 枚举左端点,然后发现右端点无非三种情况: 极大极小值都在左边; 有一个在左边; 极大极小值都在右边; 考虑递推 \(l\) 的同时递推最靠右的满足最大最小值在左边的位置 \(p_1,p_2\). 根据不同的情况计数即可,注意计算以 \(\rm mid\) 作为右端点的情况. 总时间复杂度为\((nlogn)\). 重点:分治算法降低复杂度的原因:根据极大极小值的不同划分数据以及? 代码 #include<bits/stdc++…
[BZOJ3745][Coci2015]Norma Description Input 第1行,一个整数N: 第2~n+1行,每行一个整数表示序列a. Output 输出答案对10^9取模后的结果. Sample Input 4 2 4 1 4 Sample Output 109 [数据范围] N <= 500000 1 <= a_i <= 10^8 题解:最近做这种题好像有点多啊~(虽然我基本上都没A). 比较直接的想法就是找出区间的最大值mid,然后分治处理[l,mid-1]和[mi…
[BZOJ 3456]城市规划(cdq分治+FFT) 题面 求有标号n个点无向连通图数目. 分析 设\(f(i)\)表示\(i\)个点组成的无向连通图数量,\(g(i)\)表示\(i\)个点的图的数量. 显然\(g(i)=2^{C_i^2}\)种,但是我们要把不联通的去掉. 枚举1号点所在联通块大小\(j\).从剩下\(i-1\)个点里选\(j-1\)个点和1号点构成联通块,有\(C_{i-1}^{j-1}\)种选法.1号点所在联通块的连边方案有\(f(i)\)种,剩下\(i-j\)个点随便连边…
[BZOJ 2989]数列(CDQ 分治) 题面 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x-y|+|a[x]-a[y]|. 2种操作(k都是正整数): 1.Modify x k:将第x个数的值修改为k. 2.Query x k:询问有几个i满足graze(x,i)<=k.因为可持久化数据结构的流行,询问仅要考虑当前数列,还要考虑任意历史版本,即统计任意位置上出现过的任意数值与当前的a[x]的graze值<=k的对数…