随笔分类 - 数据结构
摘要:题目 D1. Range Sorting (Easy Version) 题意 给一个整数n和一个数组a[1~n] 一次次排序操作的代价是,r - l 求把所有子数组,排成有序的最小代价和 思路 easy版本可以用O( )的算法,我们可以枚举左右端点 假设一段的最优排序方法如图 任意长度的一段
阅读全文
摘要:题目 1811E - Living Sequence 题意 找出第n个,数位中不含‘4’的数字 思路 数位dp + 二分 唯一要注意的就是纯dfs搜索会卡常(hh,就是复杂度太高了),用上一点记忆化 代码 const int N = 14; int dp[N][N]; int a[N]; int l
阅读全文
摘要:题目 C. Binary Search 题意 给一个数字n,构造出一个全排列的数组a,满足上面二分结果为true 请求出不同全排列数组a的数量,答案模1e9+7 思路 模拟:按照二叉查找树的思路,模拟这个二分所有可能遇到的mid,使得判断条件成立(为什么落在最后的点上?因为是折半查找,搜索树上没有重
阅读全文
摘要:模板题目 https://www.acwing.com/problem/content/907/ 题意是给一些区间,问至少取多少个点,让所有区间里至少有一个点 上面这个是区间选点的模板贪心 按照右端点排序,可以发现相邻的区间只有三种情况 $L_2 \leq L_1 \leq R_1 \leq R_2
阅读全文
摘要:题目 https://leetcode.cn/problems/handling-sum-queries-after-update/description/ 思路 操作2和操作3都非常好实现,直接累加一个和就行 关键在于操作1(nums1数组所有元素大小在0~1之间)翻转 线段树相比树状数组更好理解
阅读全文
摘要:题目 https://codeforces.com/contest/1788/problem/E 题意 给一个长度为n的数组a 定义一个子段为[x,y],价值是长度(y - x + 1) 要选择一个子段,必须 问所有不相交子段的最大价值和是多少
阅读全文
摘要:题目 https://codeforces.com/problemset/problem/1661/D 题意 给一个长度为 n 的数组 a,和一个正数k,每次在数组 a 中选取连续的k个元素 每个元素减去1,2,3……k 问至少要多少次操作,才能呢使数组 a 中所有数字小于 0 思路 从后往前贪心,
阅读全文
摘要:题目 https://codeforces.com/contest/1359/problem/D 题意 给一个 n(1≤n≤1e5) 和长为 n 的数组 a(-30≤a[i]≤30) 设 b 为 a 的一个非空连续子数组 输出 sum(b)-max(b) 的最大值 思路 正解 从数组a的范围我们可以
阅读全文
摘要:题目 https://ac.nowcoder.com/acm/contest/46812/H 题意 地图大小N*M,障碍物为“#”,地图上其他所有点有一个字母(“LRUD”之一,表示走的方向;“.”表示A停止) 有两个人A和B,A从( , )按照地图上的标记走,B从( ,$y
阅读全文
摘要:https://codeforces.com/contest/1359/problem/D 线段树最大子段模板 struct node{ int l,r; int sum,ms;//maxsum int ml,mr;//maxl,maxr }tree[N*4]; void PushUp(int i)
阅读全文
摘要:Problem - D - Codeforces 题意: 给一个n行m列的关于m的排列数组,n个m的排列,设为q[n] 对于q[i],找到最长的q[q[i]]排列是1,2,...,k,美丽值是k 输出每一个的k 思路: 看样例一可以大概知道字典树是该怎么做 对于1~m,找到原先的关于m的排列,数字的
阅读全文
摘要: 目录 动态求连续区间和 所以用到另一种方法——树状数组 另一种方法——线段树 完整线段树代码 数列区间最大值 分析: 具体实现: 数星星 小朋友排队 分析: 代码实现(树状数组): 一个简单的整数问题2 改进 代码实现 动态求连续区间和 给定 n 个数组成的一个数列,规定有两种操作,一是修改某个
阅读全文
摘要:https://codeforces.com/contest/702/problem/E 题意: 给一个n个点,n条有向边,n个权值的图,每个点一条出边 问所有的点按着有向边走k的权值和,还有k条边上的最小权值是多少,并输出 思路: 经典的倍增题目 先利用倍增找出子 的子节点是哪个,记为$n
阅读全文
摘要:Problem - E - Codeforces 题意: 给一个长度为n的数组a,问有多少个连续的子数组的异或和大于等于k 思路: 01字典树 建立前缀异或和数组,题目变为有多少个 类似(几乎一模一样)的题目 一次插入一个左端点,然后枚
阅读全文
摘要:1803. 统计异或值在范围内的数对有多少 - 力扣(Leetcode) 题意: 思路: 很经典的方法,01字典树,同时在树上多维护一个数据,有多少个节点经过当前节点,记为cnt 我们可以写出一个query(x,tar)函数,x时num数组中的数,答案就是query(x,high)- query(x
阅读全文
摘要:题目 Problem - D - Codeforces 题意 给两个长度为n的数组a,b,再给一个数组长度为m的数组x,表示m次操作 每次操作把选择一个区间把a[l ~ r]中大于x[i]的变为x[j],否则不变 问能否在m次操作内把数组a变为与数组b相等 思路 很容易知道,如果a[i] < b[i
阅读全文