
|--数据结构
文章平均质量分 61
Danliwoo
这个作者很懒,什么都没留下…
展开
-
愚人线段树
连续区间更新和询问POJ 3468 连续交了几次还WA,错误点比较多 代码+解释,盲打就指日可待啦/*线段树之连续区间更新和询问*/#include <cstdio>#include <iostream>#include <cstring>#include <queue>#include <algorithm>#include <cmath>using namespace std;原创 2016-02-16 22:37:47 · 750 阅读 · 1 评论 -
POJ 1703 Find them, Catch them 并查集
原题见POJ 1703N个人,M种输入,要么是声明两者不是同伙,要么是询问两者是否是同伙。思路年幼不懂事,看着紫书上的秩做的,今天重新思考一番,其实原理和积木移动的想法如出一辙。 把人当作积木,可以相互堆叠,a[i]为积木i底下的积木的个数(不严格,也可以是和这个数同奇偶的数字,在每次get累加路径上所有的a才能得到),p[i]为这堆积木最低端的积木编号。初始a[i]=0,p[i]=i. 声明操原创 2016-04-03 01:38:17 · 676 阅读 · 0 评论 -
愚人并查集
BASIC引入:条件中给出了两两关系,且关系具有传递性,最后问某两是否有关系。想法:让有关系的抱团,均指向团长。查询时,看是否是同一个团长即可。基本操作: *1. 初始化:每个人都是自己的团长。for(int i = 0;i < n;i++) p[i] = i;*2. 找团长:存在长链时,a指向的只是它的熟人,并不是这个团的团长。a想打破垄断,越级走访。顺带着链上的所有人都找到了团长。in原创 2016-03-15 00:08:29 · 752 阅读 · 0 评论 -
CF 482 B. Interesting Array 线段树
敲了很久所以mark一下,辣鸡!原题见CF 482B试给出n个数,满足m个条件,每个条件即第l个数到第r个数这连续几个数的&值等于q。n和m范围为1到1051到10^5,q的范围为0到2302^{30}.分析同一个数如果要满足多个条件,则这个数值为q的或。 每次满足的条件要对一个区间的值取或(旧值或新值),对于区间操作,利用线段树来操作。 所有条件标记完以后,更新到所有结点。 再反过来检验是否原创 2016-07-08 10:30:33 · 675 阅读 · 0 评论 -
数据结构报告
报告用的,和之前的内容可能有点重请见谅;)线段树降维恍然大悟给出一些矩形的位置和大小,求总共覆盖面积。 示意图解法: 一个方向作为扫描线。另一个方向坐标离散化。 扫描线往上划,依次更新区间。注意:定义好每个变量的含义。 cover是一个区间被完全覆盖时,计数覆盖了几重。子区间不用继承父区间的重数,否则在更新时会出错!(这点坑了一天) has是一个区间完全没被覆盖置为0,否则只要沾边原创 2016-04-22 22:46:33 · 1382 阅读 · 0 评论 -
HDU 5726 GCD 区间gcd查询 MAP RMQ 优化
原题见HDU 5726给N(N≤100000N\le 100000)个数,Q(Q≤100000Q\le 100000)个询问,每次查询输出区间的最大公约数,以及最大公约数为这个数的区间数目。分析查询次数很多,要做预处理,用map<最大公约数,区间数>存下来,实现O(1)的查询。 预处理发现对于同一左端点的区间而言,右端点越靠右,区间gcd单调递减。因此可以固定左端点,二分右端点,找到gcd突变的右原创 2016-07-21 20:26:29 · 1181 阅读 · 0 评论 -
POJ 3207 Ikki's Story IV - Panda's Trick 强连通分量或并查集+2sat
标签:解题报告 图论原题见POJ 3207有n个点围成一个圈,给出m条可以弯曲的边,使得点两两相连。这些边可以在圆内画,也可以在圆外画。问是否有可以让边不相交的画法。分析每条边都有两种选择,画在内部或者外部。以这两种状态来标记边,共有m对状态,对第i条边,以2i, 2i+1来标记两种状态。而且这种状态必须选一种作为结果。这符合2-sat的说法。判断是否有两条边i,j会相交。若相交,则在图中添加四条有原创 2016-10-12 20:13:41 · 898 阅读 · 0 评论 -
Problem D Curious Cupid from 2016 Asia Hong Kong Online Preliminary 莫队
标签:数据结构 解题报告处理范围处理一类无修改的离线区间询问问题流程已知[L, R]区间内的答案;O(1)内可以得到[L-1, R], [L+1, R], [L, R-1], [L, R+1]区间内的答案;通过从[L, R]到[L’, R’]的曼哈顿路径得到区间[L’, R’]内的答案,复杂度O(|L-L’|+|R-R’|)。对询问区间分块排序后再询问,复杂度O(nn√n\sqrt n)(a原创 2016-10-03 17:14:15 · 1266 阅读 · 0 评论