摘要: 简单题,题目要求显然是很多次插入,所以是链表。插入两个语句,nxt[i] = nxt[u] 表示 i结点指向u的后继, nxt[u] = i表示把u的后继设成i。设置一个头结点,指向一个不存在的结点,维护一下最后一个结点tail。#includeusing namespace std;const i... 阅读全文
posted @ 2015-09-07 23:19 陈瑞宇 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 题意:对一个矩阵进行子矩阵操作。元素最多有1e6个,树套树不好开(我不会),把二维坐标化成一维的,一个子矩阵操作分解成多条线段的操作。一次操作的复杂度是RlogC,很容易找到极端的数据(OJ上实测没有),如果判断一下然后启发式建树复杂度是min(RlogC,ClogR)。代码中结点没有保存l和r,而... 阅读全文
posted @ 2015-09-07 23:02 陈瑞宇 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 此题最难处理的操作就是将一个单点改变集合,而普通的并查集是不支持这种操作的。当结点p是叶子结点的时候,直接pa[p] = root(q)是可以的,p没有子结点,这个操作对其它结点不会造成任何影响,而当p是父结点的时候这种操作会破坏子节点的路径,因此必须保留原来的路径。我们希望pa[p] = root... 阅读全文
posted @ 2015-09-07 22:49 陈瑞宇 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 从包含k个整数的k个数组中各选一个求和,在所有的和中选最小的k个值。思路是多路归并,对于两个长度为k的有序表按一定顺序选两个数字组成和,(B表已经有序)会形成n个有序表A1+B1比较,而现在需要同时合并n个有序表,优先队列(堆)就派上用场了。类似归并排序用i和j维护有序表当前考虑元素,合并的时候,每... 阅读全文
posted @ 2015-09-07 22:20 陈瑞宇 阅读(192) 评论(0) 推荐(0) 编辑