https://www.luogu.com.cn/problem/P1083 二分加差分加前缀和,对差分数组求前缀和就是当前点的数据 因为如果第x个人可以,那么第x人前面的必定可以,如果x个人不可以,那么第x个人之后的必定不可以,故可以二分 对差分数组,每个区间左区间加这个人要借的,右区间减这个人要借的,求前缀和就是
二分的本质不是单调性。 (有单调性一定可以二分,但是二分可以做的题,不一定需要满足单调性。) 二分的本质是二段性 就是有一个分界点,分界点左边都是状态x,分界点右边都是状态y。 通过二分就可以找到红色区域的右边界值或者绿色区域的左边界值 当想找不满足性质的边界值(红色区域的右边
下面的讨论默认 \(n,m,x_i\) 同阶。 这个问题与常规 \(\tt dij\),仅仅差在高精度。而 \(\tt dij\) 所需的高精度如下: \(dis_u+w(u,v)\) 中的加法,应该有 \(m\) 次。 \(dis_u+w(u,v)\) 与 \(dis_v\) 的比较,应该有 \(m\log\) 次。 考虑数据结构维护 \(dis\) 的二进制分解。直接维护
hall 定理:对于任意二分图的一部的子集 \(S\),这些点在另一部所连的点集并为 \(S'\),若有 \(|S|\le |S'|\),那么该二分图有完美匹配。 证明的话考虑归纳喽,对于一个新点,给它分配一个,那么剩下的就是 \(n-1\) 的情况了。 图论的知识要补了。。。。 https://loj.ac/p/6062 回到这题。 考虑
\(\cal T_1\) Abracadabra Description 给定长度为 \(N\)(保证为偶数)的排列,每次操作将排列对半分,然后做归并。\(Q\) 次询问,求 \(t\) 次操作后的第 \(i\) 张牌。 \(N\leqslant 2\cdot 10^5,Q\leqslant 10^6,0\leqslant t\leqslant 10^9\). Solution 一些闲话:黑心糖赛高! 可以发现归
written on 2022-08-03 也是一道套路题,但是之前遇到得不多,所以这次总结一下。 这类题目要求统计所有区间的分数值之和。显然暴力的思路,即枚举所有的区间是不可行的。 先看一下玄学的暴力优化,这种大步跳的方法可以有效地降低时间,但是很玄学,比赛的时候可以用这种方式骗分,因为性价比
决策单调性优化 \(dp\) 对于转移 \[dp_j=\min_{i<j}(f_i+w(i,j)) \]令 \(t(i,j)\) 表示从 \(i\) 转移到 \(j\) 后 \(j\) 的 \(dp\) 值 若有对于任意 \(i<j\),存在 \(k\) 使得对于 \(任意d\in[0,k]t(i,d)\le t(j,d)任意d\in[k+1,n]t(i,d)\gt t(j,d)\) 我们就说这个转移具有决策单调
G KFC Crazy Thursday 马拉车算法 题意: 给定一个字符串,问有多少个以K或者F或者C结尾的回文子串。 思路: 马拉车算法,求出len。 利用区间加法获得总和即可。 也就是(直接看代码更容易理解)对于新串在i处“+1”,在i+len[i]+1处“-1”。因为这个区间内的字符都有某个以他为结尾的回文串。
链接 https://acm.hdu.edu.cn/showproblem.php?pid=7196 思路 读题后发现,由于每个人的到达时间不同,且可以唯一确定加入的队伍,所以每个人选择加入的队伍是确定的 那么只需要(按事件发生的时间顺序)模拟即可,使用优先队列 定义三元组<time,type,id> 把所有入队、出队操作看成操作序
高考完了,耍了快一个月,开始边耍边学习
题目背景:(为啥放图片你可以猜猜) A. 南 设\(g_i\)表示有\(i\)种武器,要拿到\(n\)种的期望花费 根据拿到与已有武器种类是否相同的概率,显然有 \(g_i = \frac{i}{n}g_i + \frac{n - i}{n}g_{i + 1} + cost\) \(cost\)为该次购买对总期望的贡献,每次购买会令后面所有购买花费\(+1\),那么
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4 利用二分查找思想 class Solutio
已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,4
模板~昨天打组队被ds和计算几何卡了 今天是学习它们的day1(该不会每一天都是day1吧 存个模板.jpg tips.主席树空间大概开30比较稳,然后爆了的话试试25左右 #include<bits/stdc++.h> using namespace std; const int N=int(1e6)+6; int rt[N*30],a[N]; struct persis_seg_tree{
例题 原题链接:https://www.acwing.com/problem/content/790/ 给定一个长度为 n 的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i<j 且 a[i]>a[j],则其为一个逆序对;否则不是。 暴力解法 不推荐,两重循环遍历,O(n^2)的复杂度,容易T
三种情况: 1.左半部分(leftsum)最大(与右边不连续,不一定包括mid) 2.右半部分(rightsum)最大(与左边不连续,不一定包括mid+1) 3.左右部分联合最大(左右两边连续,包括mid) 1和2是前面返回的(与另一边不连续 !!!,左半部分不一定是包含mid 以mid结尾的,右半部分也不一定包含mid+1,从mid+1
这次好像也不错qwq A. 序列 B. 任意模数快速插值 C. 快递 D. 任意模数多项式乘法逆 A. 序列 一眼题面:这不是在模拟更相减损么 然后发现的确是,所以飞快地过了 #include<cstdio> #include<cstring> #include<string> #define int long long #define WR WinterRain using namesp
written on 2022-02-21 因为第一次写字符Hash,所以贴一个类模板,当做入门 #include<bits/stdc++.h> typedef unsigned long long ull; using namespace std; const int base=131; int n; char a[100005]; ull f[100005],p[100005]; ull Hash(int l,int r){return f[r]-f[l-1]*p[r-l+
前言 本蒟蒻在写初赛题后听讲评时,听得一脸懵,发现对数论无所了解,于是疯狂地补,此博客在有生之年不会完结(吧),希望 \(hzx\) 不会又说我。 符号 整除符号:\(x \mid y\) 取模符号:\(x \bmod y\) 互质符号:\(x \perp y\) 最大公约数:\(\gcd(x,y)\) 最小公倍数:\(\operatorname{lcm}(x,y)\) 求和
好题。 显然区间 dp,令 \(f_{l, r}\) 为 \([l, r]\) 之间的最短的长度。如果我们要压缩,那么就要考虑 M 与 R 的位置。由于我们大体是从左往右来转移的,所以显然我们只需要记录一下 M,R 是可以枚举的。令 \(f_{l, r, 0/1}\) 代表 \([l, r]\) 之间有没有 M 的最短长度。 我们默认 \((l
染色 要求环上没有重复点,可以先求个点双。对每个点双分类讨论: 边数 \(<\) 点数:该点双中只有两个点一条边,该边不在任何环中,可以随意染色 边数 \(=\) 点数:该点双是一个环。根据 Burnside 引理,方案数为 \(\frac{1}{n}\sum_{i=0}^{n-1}k^{\gcd(i,n)}\) 边数 \(>\) 点数:该点双由若干环
改题改题改题!!!做完题一定要好好改真的会继续两次NoNoNo继续n次遇见它!!! C. 完美子图 线段树做法:考虑把一个区间向右拓展,新增加的一个位置对以前所有处理过的区间的影响,当然对自己这一个长度的影响是1,第一层循环枚举R,新加入的数能对过去的区间会造成影响只有两种情况:加入的新数成为了
斐波那契数列 斐波那契数列,又称黄金分割数列,因数学家莱昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、…… 在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*),该数
H - Code For 1 Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit Status Description Jon fought bravely to rescue the wildlings who were attacked by the white-walkers at Hardhome. On his arrival, Sam tells hi
简介 二分查找又称折半查找、二分搜索、折半搜索等,是在分治算法基础上演变的查找算法 二分查找算法仅适用于有序序列,它只能用在升序序列或者降序序列中查找目标元素 二分查找局限性 依赖数组结构 二分查找需要利用下标随机访问元素,如果使用链表等其他数据结构则无法实现二分查