随笔分类 - 0x10数据结构基础
摘要:题目链接 #题目大意 略 #解题思路 套路题。 #代码 const int maxn = 1e6+10; const int maxm = 1e6+10; struct Node { int m, f; } node[maxn]; char ans[maxn]; bool dfs(int now,
阅读全文
摘要:题目链接 #题目大意 给一个二叉树,第一个点是根,然后优先访问右儿子,然后是左儿子,右儿子的结点编号比父节点小,左儿子的结点编号比父节点大。 #解题思路 从根开始搜索,如果插入的结点比当前结点小,而且右二儿子存在,就访问右儿子,负责插入的点就是右儿子,左儿子也一样。 #代码 const int ma
阅读全文
摘要:题目链接 #解题思路 将所有的字符串编码看成是一棵trie,因为所有的字符串都不互为前后缀,所以每一个字符串都末尾都位于trie的叶子结点上。 因为要确保总长度最小,所以对于出现次数越多的字符串,其叶子在trie上的深度就越浅,那么出现次数越少的字符显然其叶子深度也就越深。所以可以用出现次数做权值,
阅读全文
摘要:题目链接 #解题思路 如果将所有数字按从大到小排序,并且从编号最大的数开始找的话,那么他的左右两边的数肯定就是离他最近的数,计算之后把编号最大的数删掉,那么编号次大的数相当于之前编号最大的数...所以利用链表来做到O(1)删除,就能在O(nlogn)的时间内解题。 #代码 const int max
阅读全文
摘要:题目链接 #解题思路 对顶栈的模板题。L和R的操作可以由对顶栈来实现,至于查询操作用一个前缀和数组和一个存最大值的数组来存就行了。 #代码 const int maxn = 1e6+10; stack<int> skl, skr; int pre[maxn], f[maxn] = {-114514}
阅读全文
摘要:题目链接 #解题思路 对顶堆模板题,一个堆对应一半。 #代码 priority_queue<int, vector<int>, less<int> > l, clears1; priority_queue<int, vector<int>, greater<int> > r, clears2; ve
阅读全文