模拟指针,也就是清华严老师<数据结构-C语言描述>中的静态链表,静态链表的引用是使用一段连续的存储区还模拟指针的功能,可以有效的利用一段连续内存进行一定范围内可变的子链表的空间分配,此数据结构原理比较简单,但是实现起来(至少我个人感觉)有一些绕,原因在于结点的指针域和所申请的整个空间数组的下标都是用整型来表示,极易出错,由于使用连续存储区,稍有不甚将指针地址错写成数组下标则很容易出错并且很难被发现. 以下为本次实现的模拟指针代码,由三个文件构成: 1. simulatedPointer.h  …
#1.0 简述 #1.1 动态树问题 维护一个森林,支持删除某条边,加入某条边,并保证加边.删边之后仍然是森林.我们需要维护这个森林的一些信息. 一般的操作有两点连通性,两点路径权值和等等. #1.2 实链剖分 先来回顾一下树链剖分,我们可以按照子树大小进行剖分(重链剖分),也可以按照子树高度进行剖分(长链剖分),使得原本的一棵树被分为若干条链,然后可以在链上通过如线段树这样的数据结构维护信息. 那么,存不存在一种剖分方式能够使我们更加得心应手地处理动态树问题?显然剖出的可能会不停变换,于是我们…
记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些年头了:我当年做过的一个最糟糕的决定(也是如今回想起来依然觉得很 2B 的决定)也和 C 语言有关(和本文主题无关,略去不表)-- 由此说来,和 C 的缘分还是蛮重的.可惜,今天,我还是在一个关于指针的问题上,小小迷糊了一下-- 曾经还自诩熟读<The C programming language>…
维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(template)来达成泛型,通常借由类型(class)的解构函数来达成自动释放指针所指向的存储器或对象. 简单的来讲,智能指针是一种看上去类似指针的数据类型,只不过它更加智能,懂的完成内存泄露,垃圾回收等一系列看上去很智能的工作.如你所看到的那样,借助 C++ RAII(Resource acquisi…
真是 \(6\) 道数据结构毒瘤... 开始口胡各种做法... 「HNOI2016」网络 整体二分+树状数组. 开始想了一个大常数 \(O(n\log^2 n)\) 做法,然后就被卡掉了... 发现直接维护一定是 \(O(n\log^3 n)\) 的,所以我当时选择了用 \(LCT\) 维护树上路径,跑起来比树剖可能都慢... 其实路径加单点查可以直接在 \(dfs\) 序上弄树状数组的,虽然也是 \(O(n\log^2 n)\) 的,但是肯定能通过此题... \(Code\ Below:\)…
「NOWCODER」CSP模拟赛第3场 T1 货物收集 题目 考场思路即正解 T2 货物分组 题目 考场思路 题解 60pts 算法:一维 DP 100pts 算法:一维 DP ?线段树 + 单调栈 优化 ! T3 地形计算 题目 考场思路 正解 感觉是比较好的一套题 因为几乎都有思路 可惜只打了一个小时 附一下出题人的玄学题解 T1 货物收集 题目 点这里 考场思路即正解 一道比较简单的题,结果 PPLPPLPPL 因为编译器原因爆 000 了 咕咕咕 我的时间复杂度 O(N⋅log2N)O(…
题面:#10471. 「2020-10-02 提高模拟赛」灌溉 (water) 假设只有一组询问,我们可以用二分求解:二分最大距离是多少,然后找到深度最大的结点,并且把它的\(k\)倍祖先的一整子树删掉,看一下一共要删几次,显然满足单调性. 现在要询问所有取值.上面二分的过程启发我们可以反过来,通过枚举答案,然后找到答案对应哪些询问.显然对于当前\(\text{ans}\),一次删除最少删掉\(ans+1\)个点,最多删\(\frac{n}{ans+1}\)次,因此是一个调和级数\(\frac{…
题面:#10470. 「2020-10-02 提高模拟赛」流水线 (line) 题目中的那么多区间的条件让人感觉极其难以维护,而且贪心的做法感觉大多都能 hack 掉,因此考虑寻找一些性质,然后再设计 DP 状态. 设两端区间\(Q_i\)和\(Q_j\)满足\(Q_i \subseteq Q_j\),那么显然\(Q_j\)要么单独一组,要么就和\(Q_i\)一组. 证明使用反证法,设\(Q_j\)与其他某些一组,那么我把\(Q_j\)放入\(Q_i\)那一组,显然两组的答案都不会变少. 因此我…
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 不论新老朋友 我相信您都可以 从中获益.如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力! Part 1. 面向对象设计概述 面向对象程序设计 (Object-Oriented Programming, OOP) 是当今主流的程序设计…
「ZJOI2018」历史(LCT) \(ZJOI\) 也就数据结构可做了-- 题意:给定每个点 \(access\) 次数,使轻重链切换次数最大,带修改. \(30pts:\) 挺好想的.发现切换次数只跟子树中所有结点的 \(access\) 次数,可以树形 \(dp\).假设 \(x\) 有 \(m\) 个儿子,每个儿子的 \(access\) 次数为 \(A_i\),自己为 \(A_0\),问题转换成有 \(m+1\) 种颜色,问怎么使颜色不同的间隔最多.使 \(sum=\sum_{i=0}…