- 博客(17)
- 收藏
- 关注
原创 韦东山MQTT交叉编译解决办法
最后发现添加cmake .. "-DCMAKE_TOOLCHAIN_FILE=../arm-linux.cmake"的时候位置添加错误了。按照老师的视频教程,发现/build/bin下的exqx_example文件仍然是在x86模式下的文件,发现没有交叉编译成功。大家在添加的时候要在这个位置添加,不要在文件结尾加。
2024-09-09 17:03:09 151
原创 UNIX 环境高级编程第十一章
从输出结果可以看出,两个线程都正确的启动和退出了,但是只调用了第二个线程的清理处理程序,如果线程是通过从他的启动例程中返回而终止的话(没有调用pthread_exit),那么他的清理处理程序就不会被调用,还要注意清理处理程序时按照与他们安装是相反的顺序呗调用的。因为新的结构是放在全局列表中的,其他线程可以找到它,所以在完成初始化之前,需要阻塞其他试图访问新结构的线程。虽然读写锁的视线各不相同,但当读写锁处于读模式锁住状态时,如果有另外的线程试图以写模式加锁,读写锁通常会阻塞随后的读模式锁请求。
2024-07-14 17:41:42 773
原创 UNIX环境高级编程第八章
当程序需要增加特权,或需要访问当前不允许访问的资源时,我们需要更换自己的用户ID或组ID,使得新ID具有合适的特权或访问权限。典型的会计记录包含总量较小的二进制数据,一般包括命令名,所使用的CPU时间总量,用户ID和组ID,启动时间等。子进程是父进程的副本。如果设置了文件的设置用户ID位,则在exec根据文件的用户ID设置了进程的有效用户ID以后,就将这个副本保存起来。注意,当原先的进程(也就是exec本程序的进程)终止时,shell打印其提示符,这在第二个子进程打印其父进程ID之前。
2024-07-13 20:24:40 825
原创 洛谷 P2042 [NOI2005] 维护数列(splay)
(1)插入,当需要再数列第pos个数字后面插入一段序列时,我们需要splay(pos,0),splay(pos+1,pos),将pos旋转到根,将pos+1旋转到pos的下面,此时,我们只需要构建出插入的序列,然后将其插入到pos+1节点的左子树上即可。(2)删除,当需要删除pos开始的tot个数字时,我们只需要splay(pos-1,0),splay(pos+tot,pos-1),然后将pos+tot的左子树删除即可。(3)如果需要修改一个区间的话,我们就直接将它的懒标记更新。(5)区间最大子序列ms。
2024-07-11 22:11:10 562
原创 洛谷 P3224 [HNOI2012] 永无乡(启发式合并+splay)
永无乡包含 𝑛 座岛,编号从 1 到 𝑛 ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 𝑛 座岛排名,名次用 1 到 𝑛 来表示。用并查集维护集合间的关系,用splay维护每个集合,当两个集合合并的时候,将集合中节点少的一个集合暴力合并到集合中节点多的一棵splay上,然后查询的时候就是简单的splay查询。表示询问当前与岛 𝑥 连通的所有岛中第 𝑘 重要的是哪座岛,即所有与岛 𝑥 连通的岛中重要度排名第 𝑘 小的岛是哪座,请你输出那个岛的编号。时间复杂度O(nlognlogn)
2024-07-09 23:20:46 332
原创 UNIX 环境高级编程第七章
本章中将学习:当执行程序时,其main函数时如何被调用的;命令行参数是如何传送给执行程序的;典型的存储器布局是什么样式;如何分配另外的存储空间;进程如何使用环境变量;各种不同的进程终止方式等。
2024-07-09 21:34:05 654
原创 UINX 环境高级编程第六章
然而,由于/etc/passwd文件需要对系统中的所有用户刻度,以便执行各种操作(如获取用户名,主目录等),这意味着任何用户都可以读取加密的密码字段。这样以来,普通用户无法访问加密的密码,增强了系统的安全性。UNIX系统的正常运行需要使用大量的与系统有关的数据文件,例如,口令文件/etc/passwd和组文件/etc/group就是经常由多种程序使用的两个文件。此类情况是经常有的。两个localtime和gmtime将日历时间转换成年,月,日,时,分,秒,周日表示的时间,并将这些时间存放在一个tm结构中。
2024-07-08 23:59:18 742
原创 洛谷 P1486 [NOI2004] 郁闷的出纳员(splay)
这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资。工资的频繁调整很让员工反感,尤其是集体扣除工资的时候,一旦某位员工发现自己的工资已经低于了合同规定的工资下界,他就会立刻气愤地离开公司,并且再也不会回来了。对于2,3两种情况,我们设置一个变量delta,每次涨薪,降薪的时候我们都在deltag上操作,那么每个节点的当前价值加上delta就是实际价值,每次降薪之后,我们需要找到>=min-delta的最小值的工资的节点,然后把这个节点之前的所有节点都删除(不包括L节点)。
2024-07-08 16:46:10 457
原创 洛谷P3391 【模板】文艺平衡树(splay)
Splay树是一种高效率的BST(二叉搜索树),他的基本操作是把节点旋转到二叉树的根部,旋转操作能有效改善树的平衡性。这个操作附带实现了一个重要应用——高效率访问“热数据”。例如,在计算机网络中,交换机上的路由表的某些IP地址是“热”地址,需要被频繁查询。若用Splay树存储路由表,可以把这些热地址旋转到二叉树的根部,从而尽快被查询到。Splay树的整体效率也很高,他的平摊操作次数为O(log2 n),也就是说,在一棵有n个结点的BST上做M次Splay操作,时间复杂度为O(Mlog2 n)。
2024-07-08 14:24:34 593
原创 牛客网 前缀和--牛牛的猜球游戏
首先牛牛把这10个球按照从左到右编号为0,1,2,3...9的顺序摆在了桌子上,接下来牛牛把这10个球用10个不透明的杯子倒扣住。操作序列的每一行表示一次操作都有两个非负整数a,b,表示本次操作将会交换从左往右数第a个杯子和从左往右数第b个杯子(a和b均从0开始数)。牛牛和牛妹一共玩了m次猜球游戏,在每一轮游戏开始时,他都将杯子中的小球重置到从左往右依次为0,1,2,3...9的状态。(l和r的编号从1开始计算)对于100%的测试数据,保证1≤n,m≤1e5,0≤a,b≤9,1≤l≤r≤n。
2024-06-29 23:53:20 827
原创 牛客网 线段树练习题--线段树
假设当前孩子结点的懒标记为a1,b1,现在父亲节点的懒标记为a2,b2要传递给孩子结点a2*(a1*x+b1)+b2=a2*a1*x+a2*b1+b2,即现在的孩子结点乘的懒标记为a2*a1,加的懒标记变为a2*b1+b2。3 l r,求区间a[l]到a[r]之间两两之间数字的乘积和(例如:2,3,4,5两两之间乘积和为 2*3+2*4+2*5+3*4+3*5+4*5)每组数据,第一行三个数值,n,m,p,表示有n个数字,有m个操作,p为模数,所有算术操作均要取模。现在给你一串数字,a1,a2,a3…
2024-06-28 17:10:35 554
原创 牛客网 线段树练习题--数据结构
qn姐姐最好了~qn姐姐给你了一个长度为n的序列还有m次操作让你玩,1 l r 询问区间[l,r]内的元素和2 l r 询问区间[l,r]内的元素的平方 和3 l r x 将区间[l,r]内的每一个元素都乘上x4 l r x 将区间[l,r]内的每一个元素都加上x。
2024-06-27 19:59:52 352
原创 UNIX 环境高级编程第五章
对这三个标准I/O版本的每一个,其用户CPU时间都大于表4-2中的最佳read版本,因为在每次读一个字符的标准I/O版本中有一个要执行1亿次循环,而在每次读一行的版本中有一个要执行3144984次的循环。对于行缓冲有两个限制,第一,因为标准I/O库用来收集每一行的缓冲区的长度是固定的,所以只要填满了缓冲区,那么即使还没有写一个换行符,也进行I/O操作。时钟时间是用户感知到的程序运行的总时间。包括:用于实际I/O的文件描述符,指向用于该缓冲区的指针,缓冲区的长度,当前在缓冲区中的字符数以及出错标志等等。
2024-06-23 21:55:51 552
原创 UNIX 环境高级编程第四章
系统管理员常常使用访问时间来删除在一定时间范围内没有访问过的文件。修改时间和更改状态时间可被用来归档其内容已经被修改或其i节点已经被更改的哪些文件。ls命令按这三个时间值中的一个排序进行显式。按系统默认(用-l或-t选项调用时),它按文件的修改时间的先后排序显式。-u选项使其用访问时间排序,-c选项使其用更改状态时间排序。表4-11列出了我们已说明过的各种函数对这三个时间的作用。目录是包含目录项(文件名和相关的i节点编号)的文件,增加,删除或修改目录项会影响到与其所在目录相关的三个时间。
2024-06-21 15:09:40 878
原创 洛谷 P1892 [BOI2003] 团伙
原本想着是用并查集维护集合,先将所有的朋友关系的集合合并,然后考虑一个节点i,它的所有敌人可以合并成为一个集合,即 “敌人的敌人就是朋友”,这样,我们就只需要维护每个节点i的敌人的集合,然后对这个集合中的并查集进行维护即可。经过仔细分析,我发现了在记录敌人的时候,如果a是b的敌人,那么b同时也就是a的敌人,上面那个代码只是维护了a是b的敌人,并没有维护b是a的敌人。接下来 𝑚 行,每行一个字符 𝑜𝑝𝑡和两个整数 𝑝,𝑞分别代表关系(朋友或敌人),有关系的两个人之中的第一个人和第二个人。
2024-06-16 15:14:43 319
原创 UNIX 环境高级编程第三章
例如,i节点包含了文件的所有者,文件长度,文件所在设备,指向文件实际数据块在磁盘上所在位置的指针等等。具体处理方式与文件系统的实现有关,当定位超出文件尾端之后写时,对于新写的数据需要分配磁盘块,但是对于源文件尾端和新开始写位置之间的部分则不需要分配磁盘块。文件偏移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将加长该文件,并在文件中构成一个空洞,这一点是允许的。每个进程都有自己的文件表项的一个理由:这种安排使每个进程都有它自己对该文件的当前偏移量。(2)内核为所有打开文件维持一张文件表。
2024-06-15 23:07:34 1042
原创 洛谷1621 集合
对于样例给定的数据,最后有 {10,20,12,15,18},{13},{14},{16},{17},{19},{11}{10,20,12,15,18},{13},{14},{16},{17},{19},{11} 共 77 个集合,所以输出应该为 77。:我们可以先筛选出1-100000中的所有质数,然后对于每一个a到b之间的数字t,我们可以用所筛出的质数判断,如果t对这个质数取模模值为0,并且这个质数大于等于p,就将两个集合合并,对于集合,我们使用并查集来维护。直接提交发现TLE了两个点。
2024-06-12 14:58:11 263
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人