数据结构
swust_lian
无武
展开
-
KMP模板
#include #include#includeusing namespace std;//p串在s串中出现的次数char s[1000001]; char p[10005];int next[10005];//next[i] 0-i字符串最大匹配数/** next[]的含义:x[i-next[i]...i-1]=x[0...next[i]-1]* ne原创 2016-01-10 12:41:48 · 326 阅读 · 0 评论 -
codeforces 617E XOR and Favorite Number (莫队)
题意:给你n个数(a1....an)和常数k,m次询问,求出(l,r)这个区间中有多少个自区间把所有的值异或起来等于k。解:保存每个数前缀的异或,s[i]:表示a1~a(i-1)的异或。我们先考虑,从左到右扫过去,val=s[i]^k。在i之前有没有ai等于val呢? 如果有,说明中间某些值异或起来肯定为k。 因为 k^k=0, a[i]^0=a[i]。 又如果val在之前出现了多次呢?显原创 2016-01-31 16:59:07 · 389 阅读 · 0 评论 -
CodeForces 46D Parking Lot (线段树区间合并)
题意:长为len的停车场,一辆车要停下,则必须车尾留b长度的空间且车头与前面的车保持f长度。有n次操作:1,长为val 的车要寻找车位停下,若能停下输出最小的停车点下标,否则输出-1 2,第val辆车开走了。解:显然是线段树的区间合并。这里有个小技巧,就是树的范围是(-b,len+f-1).这里就保证了第一辆车停在0点,不用特判边界条件。为什么原创 2016-07-25 22:54:31 · 312 阅读 · 0 评论 -
Light OJ 1188 Fast Queries (树状数组离线)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1188题意:查找一个区间内不同数字的个数。分析:离线做法。先按r排序,标记每个数前面出现的位置。处理到位置i时,如果a[i]在前面出现过,那么把前面那个位置在树状数组中清0。然后标记这个数的新位置。然后就是求区间问题了。#include #inc原创 2016-08-06 15:09:14 · 397 阅读 · 0 评论 -
Codeforces Round #365 (Div. 2) D Mishka and Interesting sum (离线树状数组)
题目链接题意:求区间内出现偶数次的数的异或值。分析:和求一个区间内不同元素个数做法一样。树状数组存的是不同元素的前缀异或和。用map标记数a[i]最近的出现的下标。其实就是先求出这个区间的(异或和),然后异或上这个区间不同数的异或和(即由树状数组求出来的)。#include #include #include #include #include #include #incl原创 2016-08-06 16:37:53 · 367 阅读 · 0 评论 -
二叉树的前序、中序、后序遍历非递归实现
思路: 借助栈来实现前序遍历:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */// 前序...原创 2019-04-20 11:03:39 · 298 阅读 · 0 评论