摘要: 时间复杂度 一般题目会限制时间为1s,在1s内计算机最多进行 5*10^8次运算。 由于时间复杂度N的前面还会存在常数,因此以下的最大数据规模除以10或除以2都是很保险的,不会发生超时现象。 一般1到2s,c++操作次数控制在107到108为最佳。 空间复杂度 \[128MB==3.2*10^7(i 阅读全文
posted @ 2023-10-19 18:36 White_Sheep 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 前置芝士 重构字符串 [problem description] 给定一个字符串 s ,检查是否能重新排布其中的字母,使得两相邻的字符不同。 返回 s 的任意可能的重新排列。若不可行,返回空字符串 "" 。 1 <= s.length <= 500 s 只包含小写字母 [solved] [贪心+木桶 阅读全文
posted @ 2023-10-19 15:24 White_Sheep 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 前置芝士 条件前缀和 二维前缀和 树上前缀和 点前缀和 s[i]表示从根节点到节点i的点权和。 先自顶向下计算出前缀和s[i],然后用前缀和拼凑出(x,y)的路径和。 求路径和公式: \(s[x]+s[y]-s[lca]-s[fa[lca]]\) 边前缀和 设s[i]表示从根节点到节点i的边权和。 阅读全文
posted @ 2023-10-19 07:22 White_Sheep 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 前置芝士 尺取法 快指针先动,慢指针跟行,一伸一缩。 两个线段获得的最多奖品 [problem description] 在 X轴 上有一些奖品。给你一个整数数组 prizePositions ,它按照 非递减 顺序排列,其中 prizePositions[i] 是第 i 件奖品的位置。数轴上一个位 阅读全文
posted @ 2023-10-18 00:04 White_Sheep 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 前置芝士 二维差分数组 \(1≤q≤100000,1≤n,m≤10^3,1≤x1≤x2≤n,1≤y1≤y2≤m,1≤a_{i,j},c≤10^5\) void solve(){ int n,m,q; cin>>n>>m>>q; vector<vector<ll>> a(n+1,vector<ll>( 阅读全文
posted @ 2023-10-17 23:53 White_Sheep 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 所有子数组中不平衡数字之和 [problem description] 一个长度为 n 下标从 0 开始的整数数组 arr 的 不平衡数字 定义为,在 sarr = sorted(arr) 数组中,满足以下条件的下标数目: 0 <= i < n - 1 ,和 sarr[i+1] - sarr[i] 阅读全文
posted @ 2023-10-17 20:49 White_Sheep 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 前置芝士 查找最后一个<=q的数的下标 // l,r均初始化为开区间 int a[100010],n; int find(int q){ int l=0,r=n+1;//左右指针为开区间 while(l+1<r){ int mid=l+r>>1; if(a[mid]<=q) l=mid; else 阅读全文
posted @ 2023-10-17 20:26 White_Sheep 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 前置芝士 最长上升子序列 (LIS) 平衡子序列的最大和 [problem description] 给你一个下标从 0 开始的整数数组 nums 。 nums 一个长度为 k 的 子序列 指的是选出 k 个 下标 \(i_0、i_1、 ... 、i_{k-1}\) ,如果这个子序列满足以下条件,我 阅读全文
posted @ 2023-10-17 20:14 White_Sheep 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 前置芝士 集合 其中 &表示按位与,∣ 表示按位或,⊕表示按位异或,∼ 表示按位取反。 [集合与集合] [集合与元素] 通常会用到移位运算。其中 <<表示左移,>>表示右移。左移 i 位相当于乘 \(2^i\),右移 i 位相当于除 \(2^i\)。 [证明] 删除最小元素 s = 101100 s 阅读全文
posted @ 2023-10-17 13:56 White_Sheep 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 前置芝士 众数 对数 \(log_1(x)\)是没有意义的,会报错。 生成[l,r]的log2数组 以 2 为底的对数实际上是在求一个数在二进制下的最高有效位的位置,这个位置从 0 开始计数,也就是说,如果一个数有 n 位二进制表示,那么它的最高有效位的位置就是 n-1。 for(int i=1;i 阅读全文
posted @ 2023-10-16 23:35 White_Sheep 阅读(7) 评论(0) 推荐(0) 编辑