字典树:
hdu 1251 统计出以某个字符串为前缀的单词数量
hdu 1800 要求的就是有几个递减的序列,也就是找到最多重复的值。
hdu 1247
离线处理
这个题很蛋疼,不仅不告诉你字符串的长度,而且ac代码对于ab abab 这种情况的结果竟然是ab
hdu 1671
顺序插入即可,插入时判断,是否存在其前缀或者插入的号码是否是其它号码的前缀。
hdu 2846 (*)
对于商品名为abcd的商品,拆为abcd,bcd,cd,d,插入字典树。
在每个结点处,记录该有多少商品名包含该字符串。
(根据字典树查询时的限制,只能从root开始 考虑,所以必须拆商品名)
字典树的题目 开数组时要十分小心,有时候题目给的内存限制,还不够极端情况,这个时候尽量开大,有的时候数组开小了,返回的是wa。
树状数组
hdu 2492 (枚举+扫描)
枚举裁判位置,L1[x]*R2[x]+L2[x]*R1[x]即为答案。
维护树状数组从左往右,从右往左扫描两次即可。
hdu 1394 求最小逆序数
先求出初始状态的逆序数
之后维护一个树状数组进行n-1次变换,
每次都可在短时间内更新当前逆序数。(考虑最左数移动到最右边造成的影响)
hdu 2852 KiKi's K-Number (二分+树状数组)
树状数组是升级版的的前缀和sum[],这个题还是利用[x,y]=sum(y)-sum(x-1);
官方:对于新插入的线段,查询有多少个线段左端点大于等于该线段的左端点。 再查询有多少个线段的右端点大于该线段右端点, 两者之差就是答案。用两个树状数组搞定。时间复杂度nlog
其实也= 查询右端点小于等于该线段右端点数目-左端点小于该线段数目
这个公式成立必须有一个前提:那就是题目中给出条件的放宽版:添加的线段长度是不递减的。
并查集
并查集删点:
就是将已经连上的点孤立,孤立一个点,相当于建立一个新点,原来的点作废,不用真的删除。
HDU 3038 How Many Answers Are Wrong 题解