1. 问题描述 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。 进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗? 示例 1 输入:nums1 = [1,3], nums2 = [2] 输出:2.00000 解释:合并数组 = [1,2,3] ,中位数 2 示例 2
Xor-MST 题面翻译 给定 \(n\) 个结点的无向完全图。每个点有一个点权为 \(a_i\)。连接 \(i\) 号结点和 \(j\) 号结点的边的边权为 \(a_i\oplus a_j\)。 求这个图的 MST 的权值。 \(1\le n\le 2\times 10^5\),\(0\le a_i< 2^{30}\)。 题目描述 You are given a complete undirecte
前言 感谢 yzh、wjy、lsc、qyb 等一众大奆的大力支持 本人DS就是个傻逼,博客几乎没有任何技术含量,各位想提升自己熟练度的dalao请移步以上任意一位的博客。本文试着讲清楚各种莫队的基本思路,有对各种莫队复杂度的口胡证明,同时会不定期放一些例题。 莫队,是一种优雅的暴力,有着优秀的
题目链接:Find 4-cycle 给定一个二分图,一边有 \(3\times 10^5\) 个点,另一边只有 \(3\times 10^3\) 个点,让你找一个长度为 \(4\) 的环。 首先,在二分图上的四元环肯定是左边两个点右边两个点,两两之间有边。 容易发现 \(3\times 10^3\) 这个数很小,可以从这个角度想一些比较暴力的做法
虽然说这是图上计数的问题,但是方法还是非常简单的。 我们只考虑无向图的情况。有向图只需要在无向图的环求出之后验证一下就行了。 我们不妨假设图中的点标号为 \(1,2,\cdots,n\)。然后我们对这个无向图的边进行定向,从度数小的点连向度数大的点,如果度数相同就从标号小的点连向标号
线性DP:走到某个位置时能表示的权值(通常和题目需求相关) DP[i] 表示走到 i 位置的题目相关值。 背包DP:选择问题,(可通过一些方法降低时间复杂度) DP[i][j] 表示前i个数,选择j个体积后的值。 区间DP:小区间到大区间之间变大。 DP[i][j] 表示[i,j] 区
题意 给定正整数 \(n\),求有多少 \(\{1,2,\dots ,n\}\) 的子集 \(S\) 满足任意一个 \(1\) 到 \(n\) 到整数都能被表示成 \(S\) 的子集和,且方案数小于等于 \(2\)。 对 \(998244353\) 取模。 \(n\le 1500\) 题解 一看到这个,就想到 AHOI 的山河重整,但做法完全不同。 考虑用背包判
差分 差分的概念就是求相邻两个元素的差值,可用于将一整段数字一起加减降低复杂度 将一段数x到y依次加1 q[x]--; q[y+1]++; 进行完所有操作之后使用前缀和还原之前的数字 for(int i=1;i<=L;i++){ s[i]=s[i-1]+q[i]; }
公式 拉格朗日插值可以用 \(n+1\) 个点值插出一个 \(n\) 次多项式。对于 \((x_i,y_i)\),有如下性质: \[f(x)-y_i\equiv 0\pmod {(x-x_i)} \]显然 \(m_i=\prod _{j\neq i}(x-x_j)\),\(m_i\) 在模 \(x-x_i\) 意义下的逆为 \(\prod_{j\neq i} (x_i-x_j)\)。根据中国剩余定理: \[f(x)=\sum
素数算法(Prime Num Algorithm) 数学是科学的皇后,而素数可以说是数学最为核心的概念之一。围绕素数产生了很多伟大的故事,最为著名莫过于哥德巴赫猜想、素数定理和黎曼猜想(有趣的是,自牛顿以来的三个最伟大数学家,欧拉、高斯和黎曼,分别跟这些问题有着深刻的渊源)。我写这篇文章不是要探
不是O(N^2) ,是O(N)。两个指针遍历了整个数组一次 时间复杂度与最内层循环主体的执行次数有关与有多少重循环无关. The time complexity is related to the number of executions of the innermost loop body, independent of how many repeated loops there are
昨天逛知乎,看见一个对完全背包时空复杂度优化的定量解法,觉得的非常好 于是,本篇博客,我将记录对01、完全背包中时间、空间复杂度优化的详解,作为昨天博客内容 动态规划——背包问题(一)01背包和完全背包 的补充 首先是题目 完全背包问题 从上一篇文章中我们先列出了最开始的完全背包状
logn是什么意思_时间复杂度 O(log n) 意味着什么? 算法的时间与空间复杂度(一看就懂) 时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。 空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。 1、时间复杂度 一般情况下,算法中的
AcWing 859 最小生成树的定义: 给定一张边带权的无向图 \(G=(V,E)\),其中 \(V\) 表示图中点的集合,\(E\)表示图中边的集合,\(n=|V|\),\(m=|E|\) 由$ V$ 中的全部 \(n\) 个顶点和 \(E\) 中 \(n−1\) 条边构成的无向连通子图被称为 \(G\) 的一棵生成树,其中边的权值之和最小的生成树被称
Q: 为什么说雨兔是个傻子? A: 因为一路上全是星号标记. 0. 「CF 1672H」Zigu Zagu * Link & Submission & Tag:「C.性质/结论」 一个被忽略的方法——寻找操作前后变化形式优美的特征值. 假设对序列 \(S\) 操作, 设其中 \(00\) 子段的数量为 \(x\), \(11\) 子段的数
系统调用 select poll epoll 事件集合 用哦过户通过3个参数分别传入感兴趣的可读,可写及异常等事件 内核通过对这些参数的在线修改来反馈其中的就绪事件 这使得用户每次调用select都要重置这3个参数 统一处理所有事件类型,因此只需要一个事件集参数。 用户
时间复杂度与基本排序算法 一.时间复杂度 时间复杂度是用来描述一个算法的,从字面意义我们不难理解,时间复杂度就是用来描述一个算法所需要的时间。用来估计常数操作的一种指标 我们首先来从常数操作的概念入手。 int a=arr[i]; 这就是个典型的常数操作,执行的时间和这个数组的数据
package array import ( "sort" "testing" ) // 题目:输入一个字符串,打印出该字符串中字符的所有排列。 // 要求:不能重复,比如:字符串中可能为abcb,但结果中不能有两个abbc //直接运行此测试方法即可 func TestPermutation(t *testing.T) { //这里演示一下切片截取,【大
线段树(Segment Tree)是一种二叉树形态的数据结构。 用于存储区间或线段,并且允许快速查询结构内包含某一点的所有区间信息。 过程类似于归并排序,通过递归实现。 线段树的基本操作: 建立线段树:复杂度O(n),递归建立,从叶节点→根 区间查询:复杂度O(log n),递归查找,从根→叶节点 区间修改:复
考虑维护包含前$i$个点的最小圆,并不断加入下一个点—— 若加入的点被该圆包含,显然答案不变,否则该点必然在新的最小圆边界上 换言之,此时得到了一个确定边界上某点的子问题,并用类似的方式处理 以此类推,当第$3$轮中出现此情况时,即得到了圆边界上的三点,进而解出该圆 具体的,以距离圆心
前言在代码编程时,遇到题目的时候小读者们一定会想到暴力算法,把题目模拟出来 一、暴力与正解暴力:泛指非正解、复杂度较高、能够拿到部分分的做法(可能会超时、超空间,但答案一定正确) 实现暴力的方法:搜索与模拟 正解:期望能够拿到满分的做法(可能会实现错误或者伪做法) 实现:将脑中的思路
[SDOI 2017] 苹果树 一些闲话:前排真的超级热热热热热热热热热热热热热热热热热热。要热死了要热死了要热死了 ☹️
本题涉及了关于线性筛、质因数分解、置换、分析数据范围特性等多种技巧,是一道难得的好题,为出题人点赞! 题目链接:LOJ 、 luogu Hint 1 可以把每个 \(p_i\) 看成从 \(i\) 连向 \(p_i\) 的一条有向边,这样整个图会由若干个互不相交的简单环构成(所有点的入度出度均为 \(1\) )。 可以通过
重点记忆:(红色) 示例: 总结:
这个之前学过的,结果我发现我忘了,怕之后再忘,我就再写一下吧。毕竟这个东西非常有用(好写)可以代替cdq/平衡树+斜率优化,来优化dp 流程 数据结构本质是一棵线段树,每个节点都储存了\(bst[]\)。 \(bst[l,r]\)表示覆盖该点范围的在\(mid\)处取最值的线段。 你会想:维护这个有什么用?每个