随笔分类 -  数据结构

摘要:" D. Harmonious Graph " 好后悔在写这个题之前浪费了几分钟时间,不然我就写出来了.... 因为他就是连通块之间的合并问题,所以就用并查集就好了 复杂度好像也只是线性的吧... 然后就A了 代码: 阅读全文
posted @ 2019-12-05 19:21 caoanda 阅读(165) 评论(0) 推荐(0)
摘要:树状数组 可以利用多个树状数组来实现数组的区间更新,参考:[A Simple Problem with Integers](https://www.cnblogs.com/CADCADCAD/p/12287090.html) 阅读全文
posted @ 2019-12-03 20:19 caoanda 阅读(179) 评论(0) 推荐(0)
摘要:" E. Editor " 我们把“(”用1表示,“)”用 1表示,其余字母用0表示,这样形成的一个数组,我们求出它的前缀和 ,只有当$sum[n]==0$且$min(sum[])==0$中的时候,才表示括号正好匹配,且最大嵌套数为$max(sum[])$ 对于一个数组来说,要实现多次单点查询、区间 阅读全文
posted @ 2019-12-03 18:17 caoanda 阅读(641) 评论(0) 推荐(0)
摘要:" D. Shichikuji and Power Grid " 参考: "Codeforces Round 597 (Div. 2)" 思路:一个很裸的最小生成树。把建立基站看成是,城市与源点(虚构的)建边。由此建立最小生成树,即可得出答案。 代码: cpp // Created by CAD o 阅读全文
posted @ 2019-11-02 15:05 caoanda 阅读(253) 评论(0) 推荐(0)
摘要:查找链表的中间结点 题目:设计一算法查找链表的中间结点。要求该算法的时间复杂度为O(n),空间复杂度为O(1)。 当看到这个时候想了半天没想出来,时间复杂度是没问题的,但是空间复杂度要达到O(1)还是有一点不好办,然后百度了一下,发现有快指针和慢指针的写法,于是我就进去瞧了瞧,突然惊叹一声“妙啊!” 阅读全文
posted @ 2019-10-14 19:35 caoanda 阅读(197) 评论(0) 推荐(0)
摘要:​ "D. Cow and Snacks" 参考: "Codeforces 1209D. Cow and Snacks" 思路:利用并查集,构建一个生成树,然后树的边数就是能够开心的客人的人数。用一个条件 (我在代码里反了一下),来统计某一种味道的菜是否已经被吃掉,如果等于,则证明已经被吃掉。 另外 阅读全文
posted @ 2019-09-18 16:59 caoanda 阅读(203) 评论(0) 推荐(0)
摘要:"C Paint the Digits" 思路:这道题就只需要利用单调栈,将整个数组扫一遍,求得的最后的栈内元素(要求全部小于非栈内元素)的颜色为1,其余为2 那么怎么实现呢?求最后的栈内元素(要求全部小于非栈内元素)的方法:用一个变量记录下最小的被交换的栈元素(这里需要将由于元素相等而交换的情况派 阅读全文
posted @ 2019-09-15 14:55 caoanda 阅读(293) 评论(0) 推荐(0)
摘要:"F. Remainder Problem" 这个其实并不难,只是看看考察有没有分块的思路 思路:用一个 来记录所有 中所有 的和,在查询的时候可以达到复杂度位O(1) 当然因为数据很大,不能够分很多块,而且也没有必要分很多块,因为如果在进行 操作的时候,如果 ,那么在数据范围内只有五个数满足条件, 阅读全文
posted @ 2019-08-24 14:08 caoanda 阅读(218) 评论(0) 推荐(0)
摘要:"Tree" 参考 xk 老哥的博客: "POJ 1741 Tree 点分治" 找重心: cpp int d[maxn],dcnt; void dfs(int fa,int u,int w) { d[++dcnt]=w; siz[u]=1; for(int i=head[u];~i;i=e[i].n 阅读全文
posted @ 2019-08-14 22:23 caoanda 阅读(234) 评论(0) 推荐(0)
摘要:"Housewife Wind" 参考博客: "POJ2763 Housewife Wind(树剖+线段树)" 差不多是直接套线段树+树剖的板子,但是也有一些需要注意的地方 建树: cpp void update(int x,int s,int t,int k,int p) { if(s==t) { 阅读全文
posted @ 2019-08-13 18:50 caoanda 阅读(204) 评论(0) 推荐(0)
摘要:"A Aragorn's Story" 直接套 "线段树+树剖" 板子 代码: cpp // Created by CAD on 2019/8/12. include define lson (p 1; build(l,m,lson),build(m+1,r,rson); d[p]=d[lson]+ 阅读全文
posted @ 2019-08-12 22:44 caoanda 阅读(181) 评论(0) 推荐(0)
摘要:其实树状数组和线段树写树剖都差不多,只是换了一种储存数据的方式,一种占用空间小,但是相对耗时,一种占用空间大,但是很快。 模板题: "树链剖分" 用树状数组会 tle 但是这也是一种思路 cpp // Created by CAD on 2019/8/11. include using namesp 阅读全文
posted @ 2019-08-12 19:06 caoanda 阅读(242) 评论(0) 推荐(0)
摘要:参考:线段树 模板题:线段树模板 写线段树需要注意的几点: build和update的时候最后记得加和!(d[p]=d[p<<1]+d[p<<1|1]) lazy标记下传后记得把父节点的清除!(laz[p]=0) // Created by CAD #include <bits/stdc++.h> 阅读全文
posted @ 2019-08-11 15:59 caoanda 阅读(169) 评论(0) 推荐(0)