左偏树(可并堆) 定义 在这之前,我们先来阐述一些定义: 外节点:\(ls\) 或 \(rs\) 为空的节点 距离:节点的距离 \(dist_x\) 定义为节点 \(x\) 到距 \(x\) 最近的外节点的距离,空节点的距离为 \(-1\) 其次是左偏树的性质: 左偏性:即满足 \(dist_{ls ...
[USACO1.3] 修理牛棚 Barn Repair 题目描述 在一个月黑风高的暴风雨夜,Farmer John 的牛棚的屋顶、门被吹飞了 好在许多牛正在度假,所以牛棚没有住满。 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜。有些牛棚里有牛,有些没有。 所有的牛棚有相同的宽度。 宽度为1 自门 ...
思路: 注意到对于每个数,其 \(>19\) 的质因数最多只有 \(1\) 个,称为大质数;对于 \(\le 19\) 的质因数有 \(8\) 个,称为小质数。 设第 \(i\) 个数的小质数集合为 \(h_i\)。 那么考虑对于所有数按照大质数从小到大排序,那么对于大质数相同的一段,只能放在两个集 ...
P1223 排队接水 题目描述 有 \(n\) 个人在一个水龙头前排队接水,假如每个人接水的时间为 \(T_i\),请编程找出这 \(n\) 个人排队的一种顺序,使得 \(n\) 个人的平均等待时间最小。 输入格式 第一行为一个整数 \(n\)。 第二行 \(n\) 个整数,第 \(i\) 个整数 ...
堆(Heap)的基本概念 堆是一种完全二叉树(Complete Binary Tree),其性质使得堆可以高效地支持以下操作: 插入(Insert):将一个新元素加入到堆中。 删除最大/最小元素(Delete Max/Min):移除并返回堆中的最大(大根堆)或最小(小根堆)元素。 获取最大/最小元素 ...
[USACO05NOV] 奶牛玩杂技 题目背景 Farmer John 养了 \(N\) 头牛,她们已经按 \(1\sim N\) 依次编上了号。FJ 所不知道的是,他的所有牛都梦想着从农场逃走,去参加马戏团的演出。可奶牛们很快发现她们那笨拙的蹄子根本无法在钢丝或晃动的的秋千上站稳(她们还尝试过把自 ...
思路: 考虑先求出经过 \((x_1,y_1),(x_2,y_2)\) 的抛物线解析式 我们有: \[\begin{cases} ax_1^2 + bx_1 = y_1 \\ ax_2^2 + bx_2 = y_2\end{cases} \]考虑将 \(b\) 消掉,求出 \(a\)。 那么考虑令 ...
目录位段位段的介绍位段使用示例:位段的内存分配Example内存分配解析:位段的跨平台问题 位段 位段的介绍 位段(二进制位):就是按位存储 位段(bit-field)是C语言中的一种特殊数据类型,它允许将一个字节分成几个部分,并为每个部分指定特定的位数,以便在内存中存储和访问这些部分。 其中位段相 ...
1. 2011.09.14 2011.09.14,当时还在读大二的我在CSDN写了第一篇技术博客《Java中的50个关键字)》。 当时,在百度搜索技术问题的时候,经常能搜到CSDN里大牛写的文章,觉得非常厉害,非常崇拜他们。然后就向他们学习,尝试着自己也写一写博客。第一篇博客,来回修修改改写了两周, ...
讲解 P5665 [CSP-S2019] 划分。
由朴素 dp 入手,先用二分优化,然后用走指针优化,之后注意到单调性,将状态数压缩,然后使用单调队列优化转移。 ...
思路: 考虑动态规划。 定义 \(dp_i\) 表示若有一班车在第 \(i\) 个时间出发所有人等待的时间,则状态转移方程为: \[dp_i = dp_j + \operatorname{get}(j+1,i)(j \le i - m) \]其中 \(\operatorname{get}(l,r)\ ...
讲解 P3957 [NOIP2017 普及组] 跳房子。
首先注意到单调性,考虑二分,然后使用单调队列优化 dp 快速求出最大得分。 ...
排序 1.冒泡排序 void bubblesort1(int* arr, unsigned int len) { //长度小于2就不用排序了 if (len < 2) return; for (int i = 0; i < len - 1; i++) { for (int j = 0; j < le ...
思路: 来一篇极小常数的 \(O(N^3M)\) 和 \(O(N^2M \log^2 N)\) 的题解,最慢点在 500ms 以下但是为什么还是最劣解。 定义 \(dp_{i,j,k,x \in \{0,1,2\},y \in \{0,1,2\}}\) 表示对于正在画的第 \(x\) 个字符,目前正 ...
讲解 P1973 [NOI2011] NOI 嘉年华。
考虑先将时间离散化,使用动态规划算法,使用数据结构,指针加速优化。 ...
1. 安装GCC/GDB 1.1. 安装 1.2. 校验 2. 安装CMake 2.1. 安装 2.2. 校验 3. 安装IDE 3.1. VSCode 3.2. CLion 1. 安装GCC/GDB 1.1. 安装 # 更新软件源 sudo apt update # 通过以下命令安装编译器和调试器 ...
思路: 首先令 \(nxt1_i\) 表示右侧最近的城市距离(\(id1_i\) 为编号),令 \(nxt2_i\) 表示右侧第二近的城市编号(\(id2_i\) 为编号);可以使用 set 找出离这个城市最近的 \(4\) 个城市(前面两个,后面两个)。 定义: \(f_{i,j}\) 表示从 \ ...
讲解 P9058 [Ynoi2004] rpmtdq 与 P9678 [ICPC2022 Jinan R] Tree Distance。
考虑支配点对,即丢掉一些对答案没有贡献的点对,可以通过点分治和单调栈找到这些支配点对,然后使用扫描线离线维护后缀序列。 ...
1、简述C++中命名空间的作用。 答:避免重复定义全局变量的问题。 2、定义两个命名空间A 和 B 分别在A中和B中定义变量value。在main函数中将两个空间的value打印出来。 #include "iostream" using namespace std; namespace A { in ...
题目链接:https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/description/ 题目叙述: 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换 ...