<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[RunningBeef的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/RunningBeef</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; RunningBeef]]></copyright><item><title><![CDATA[linux C++ 数据库连接池]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/127943352</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/127943352</guid><author>RunningBeef</author><pubDate>Sat, 19 Nov 2022 22:47:29 +0800</pubDate><description><![CDATA[【代码】linux C++ 数据库连接池。]]></description><category></category></item><item><title><![CDATA[红黑树实现（代码：插入、删除、检测、打印树的结构、随机生成数据测试）]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/124693348</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/124693348</guid><author>RunningBeef</author><pubDate>Tue, 10 May 2022 18:37:26 +0800</pubDate><description><![CDATA[插入结点

使用维基百科红黑树的插入实现
多种情况分类讨论，log级别
代码如下

 /* 先找到合适位置插入，之后再根据父节点颜色判断是否进行调整 */
      void insert(int key, T value)
      {
            Node *insertNode = new Node(key, value);

            Node *traver = root;
            while (traver)
            {
      ]]></description><category></category></item><item><title><![CDATA[第十五章-进程地址空间-linux内核设计与实现]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/124499533</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/124499533</guid><author>RunningBeef</author><pubDate>Fri, 29 Apr 2022 18:34:25 +0800</pubDate><description><![CDATA[地址空间

把有相同地址空间的进程称为线程
一个进程访问了不在有效范围中的内存区域，或者以不正确的方式访问了有效地址，那么内核就会终止进程

内存区域包含的内存对象

代码段：可执行文件代码的内存映射
数据段：可执行文件已经初始化的全局变量内存映射
未初始化的全局变量
进程的用户空间栈（注意进程的内核栈独立存在，由内核维护）
C库或者动态连接程序等共享库的代码段
内存映射文件
共享内存段
匿名的内存映射

内存描述符

内存描述符mm_struct结构体表示进程地址空间

mm_strcut

mm_use]]></description><category></category></item><item><title><![CDATA[第十三章-虚拟文件系统-linux内核设计与实现]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/124469657</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/124469657</guid><author>RunningBeef</author><pubDate>Thu, 28 Apr 2022 13:20:43 +0800</pubDate><description><![CDATA[文件系统抽象层

内核在底层文件系统接口上建立了一个抽象层，这个抽象层可以让linux支持各种文件系统
VFS定义了所有文件系统都支持的基本，概念上的接口和数据结构，实际文件系统在统一的接口和数据结构下隐藏了细节
用户空间：write() – 》VFS:sys_write() --》文件系统：文件系统的写方法 --》物理介质

UNIX文件系统

VFS把目录当做文件看待
文件本身：
文件相关信息：inod（索引结点）：关于文件的访问控制权限，大小，拥有者，创建时间。存储在单独的块中
文件控制信息：存储在超]]></description><category></category></item><item><title><![CDATA[第十章-内核同步方法-linux内核设计与实现]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/124417176</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/124417176</guid><author>RunningBeef</author><pubDate>Tue, 26 Apr 2022 10:58:56 +0800</pubDate><description><![CDATA[锁的粒度
自旋锁
读写-自旋锁
条件变量

]]></description><category></category></item><item><title><![CDATA[m叉树转2叉树代码实现(红棉小冰一面)]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/124328373</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/124328373</guid><author>RunningBeef</author><pubDate>Thu, 21 Apr 2022 18:19:04 +0800</pubDate><description><![CDATA[m叉树转2叉树代码实现]]></description><category></category></item><item><title><![CDATA[外部排序~]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/123532172</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/123532172</guid><author>RunningBeef</author><pubDate>Wed, 16 Mar 2022 17:55:35 +0800</pubDate><description><![CDATA[被面试官问了个对数组求交集，但是内存只能装载一个数组。然后想到数据结构的外部排序，但是当时没去看，现在补一下

对于这个面试问题的个人解法，可能不对，欢迎交流

先对两个数组用外部排序.使得有序
然后分别对两个有序数组掉一部分到内存，然后进行求交集，对两个有序数组求交集用双指针即可，具体执行搜索了解

朋友的解法 感觉很妙！！！

将数组记录各自哈希到文件，用各自数组同哈希值的文件进行求交集，如果文件过大进行rehash

外部排序
基本方法

1.将外存n个记录分成若干长度为l的子文件或段，依次读入内存.]]></description><category></category></item><item><title><![CDATA[Binary Search Tree代码实现]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/122981060</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/122981060</guid><author>RunningBeef</author><pubDate>Thu, 17 Feb 2022 13:10:33 +0800</pubDate><description><![CDATA[插入查找都很简单，主要是删除

删除思路：
从要删除的结点左子树中找到最右边的结点（要删除结点的前驱），替代要删除的结点
特殊情况：
①要删除的点是根节点的情况，记得更新根结点
② 要删除的结点没有左子树，那么直接用右子树代替要删除的结点的位置，（右子树也为空，说明要删除结点是叶子节点，也可以用空右子树（nullptr)代替）

代码入下
/*
删除
①找到目标结点 否则报错
②如果有左儿子，找左子树最右边的点替代当前结点,如果没有左儿子，把这棵树的右儿子顶替它的位置
④注意如果删除结点是root记得修改r]]></description><category></category></item><item><title><![CDATA[类成员函数做友元报错问题解决。类外实现函数的作用体现]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/122492339</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/122492339</guid><author>RunningBeef</author><pubDate>Fri, 14 Jan 2022 13:43:58 +0800</pubDate><description><![CDATA[1.先看代码

分为Buliding类和GoodGay两个类
要把GoodGay类的成员函数visit()声明为Buliding类的友元，使得可以访问Building类的私有成员变量BedRoom;

#include&lt;bits/stdc++.h&gt;
using namespace std;

class GoodGay; //类声明
class Building;//类声明



class GoodGay{
      public:
            GoodGay();//构造函数声]]></description><category></category></item><item><title><![CDATA[1044. 最长重复子串]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/122113414</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/122113414</guid><author>RunningBeef</author><pubDate>Thu, 23 Dec 2021 18:06:58 +0800</pubDate><description><![CDATA[字符串哈希学习
h[i] = h[i-1] * p + s[i];
p[i] = p[i - 1] * p;
hashNum = h[i + len] - h[i] * p[len];
可以用字符串哈希来写


且仅当两个哈希值溢出程度与 Integer.MAX_VALUE 呈不同的倍数关系时，会产生错误结果（哈希冲突），此时考虑修改  或者采用表示范围更大的 long 来代替 int。


int做乘法发生溢出警告，可以 * 1ll 转换成 足够大的long long 来完成乘法操作，然后强行向下转换in]]></description><category></category></item><item><title><![CDATA[2019CCPC秦皇岛 A. Angle Beats]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/121397717</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/121397717</guid><author>RunningBeef</author><pubDate>Fri, 19 Nov 2021 10:46:13 +0800</pubDate><description><![CDATA[#include&lt;bits/stdc++.h&gt;
#define IOS std::ios_base::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);// 快读

using namespace std;
typedef long long ll;
const ll inf = 4e9 + 1;
const int N  = 2E3 + 10;
struct ty{
    ll x,y;// x = (xa - x2) y =]]></description><category></category></item><item><title><![CDATA[2019 ICPC 南昌 Regional K. Tree（树上启发式合并 + 动态开点线段树）]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/121296975</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/121296975</guid><author>RunningBeef</author><pubDate>Fri, 12 Nov 2021 22:06:46 +0800</pubDate><description><![CDATA[#include&lt;bits/stdc++.h&gt;
using namespace std;
#define IOS std::ios_base::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);// 快读

const int N = 1e5 + 10;
const int MAX = 2e7;
int h[N],to[N &lt;&lt; 1],ne[N &lt;&lt; 1];
int son[N],sz[N];

int c]]></description><category></category></item><item><title><![CDATA[dsu on tree]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/121053233</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/121053233</guid><author>RunningBeef</author><pubDate>Sat, 30 Oct 2021 17:59:10 +0800</pubDate><description><![CDATA[要点

把问题转化成求解任意结点子树一整个层上的所有结点某些性质的特点。
注意预处理要求的答案，或者优化求解答案的时间复杂度，dsu on tree 时间复杂是 n logn ，一定要防止求解答案过程中的复杂度退化
注意数组越界，有时候要求的答案是不合法的，比如让你求一个在第5层的结点的它第3层儿子的数量，或者给你的层数大于树的有效层数
当有多棵树时，因为要遍历多棵树，防止遍历上一颗树信息对下一棵树的影响，所以遍历每一棵树都要把根节点设置为轻链，遍历整棵树的最后要消除掉这棵树的信息。

消除子树信息的方法，]]></description><category></category></item><item><title><![CDATA[奇奇怪怪的魔法阵 状压dp]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/120871239</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/120871239</guid><author>RunningBeef</author><pubDate>Wed, 20 Oct 2021 17:51:29 +0800</pubDate><description><![CDATA[传送门

思路
对每个T集合，求独立子集合
把一个集合对应成二进制数按以下方式划分，

没有最低位 : 只有高位，直接加上高位表达的集合
有最低位
①只有最低位这个位：加上这个低位表达的集合
②除了最低位还有其它高位：加上与低位无边的高位集合

#include&lt;bits/stdc++.h&gt;
using namespace std;
typedef long long ll;
const int N = 26;
const ll mod = 1e9 + 7;
int dp[1 &lt;&lt; ]]></description><category></category></item><item><title><![CDATA[Starship Troopers 树上分组背包]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/120807553</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/120807553</guid><author>RunningBeef</author><pubDate>Sun, 17 Oct 2021 09:52:01 +0800</pubDate><description><![CDATA[传送门
Problem Description
You, the leader of Starship Troopers, are sent to destroy a base of the bugs. The base is built underground. It is actually a huge cavern, which consists of many rooms connected with tunnels. Each room is occupied by some bugs, and ]]></description><category></category></item><item><title><![CDATA[E. Gardener and Tree 树形DP]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/120798579</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/120798579</guid><author>RunningBeef</author><pubDate>Sat, 16 Oct 2021 15:09:36 +0800</pubDate><description><![CDATA[传送门
题目描述

思路

求一下每个结点的所有分支路径中第二长的那条路径的长度，如果长度大于K，那么k次操作后这个结点就会被保留。做两次dfs第一次，沿着这个固定结点往下搜索，求得最长路径长度，并且记录当前结点的最长路径是来自哪个结点的（第二次搜索会用到）。第一次搜索后除了第一个结点，其它结点的最长路径都没有考虑到其经过父节点的那条路径，所以要再用第一次的根节点搜索一次，对每个结点，考虑父节点路径对它的第二长路径答案的影响，要特判父节点的最长路是不是就是自己的路径对其的贡献。

具体实现看代码
#incl]]></description><category></category></item><item><title><![CDATA[线段树维护dp状态转移]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/120749896</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/120749896</guid><author>RunningBeef</author><pubDate>Wed, 13 Oct 2021 19:22:16 +0800</pubDate><description><![CDATA[传送门
题目描述
给长度为 n 的序列 a[]，一个区间的得分为这个区间内有多少种元素恰出现一次。输出得分最大的区间，得分为多少。
分析

如果暴力枚举所有区间那么是N^2,需要考虑如何优化，可以根据区间得分的特点去思考。
设dp[l][r-1]为区间l~r-1的得分，那么dp[l][r]的得分有3种情况

dp[l][r]=dp[l][r−1]+1，第r个数没有在l∼r−1出现过   dp[l][r] = dp[l][r-1] + 1，第 r  个数没有在l  \sim  r - 1出现过 dp[l][r]]></description><category></category></item><item><title><![CDATA[2021ccpc网络赛 Monopoly 不处理负模数做法]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/120725463</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/120725463</guid><author>RunningBeef</author><pubDate>Tue, 12 Oct 2021 16:36:57 +0800</pubDate><description><![CDATA[传送门
Problem Description
Little Rabbit loves playing a tabletop game called Monopoly. In the game, players roll the dice to move around the game board, buying and trading properties, and developing them with houses and hotels. Players collect rent from thei]]></description><category></category></item><item><title><![CDATA[2021ccpc网络赛 Nun Heh Heh Aaaaaaaaaaa]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/120691849</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/120691849</guid><author>RunningBeef</author><pubDate>Sun, 10 Oct 2021 20:53:44 +0800</pubDate><description><![CDATA[Problem Description
Vasily Tadokorov is a stringologist. He thinks a string is fragrant if it can be divided into two parts — nunhehheh as the prefix and a number of (excluding 0) a as the suffix. For example, nunhehhehaaaaaa is fragrant, but nunhehheh and]]></description><category></category></item><item><title><![CDATA[HDU - 5884]]></title><link>https://blog.youkuaiyun.com/RunningBeef/article/details/120635073</link><guid>https://blog.youkuaiyun.com/RunningBeef/article/details/120635073</guid><author>RunningBeef</author><pubDate>Thu, 07 Oct 2021 13:37:11 +0800</pubDate><description><![CDATA[一年前入门的题目了，当时没写出来，现在填坑
题目
Recently, Bob has just learnt a naive sorting algorithm: merge sort. Now, Bob receives a task from Alice.
Alice will give Bob N sorted sequences, and the i-th sequence includes ai elements. Bob need to merge all of these sequences.]]></description><category></category></item></channel></rss>