今天做到了一个前缀异或的题目
输入一个长度为n(1 <= n <= 100000)数组a[1], a[2], …, a[n]。
输入一个询问数m(1 <= m <= 100000)和m组询问,每组询问形如(l, r)
对于每组询问(l, r),你需要输出a[l] xor a[l + 1] xor … xor a[r - 1] xor a[r],即第l个数字到第r个数字的异或。
一开始对异或并不是很了解 就闷头开始做 一开始做的时候总是超时 在注意到了前缀之后就尝试用二维数组来做 用横坐标来代表 l 纵坐标来代表r 数组内容就存从l到r异或的值可是如何都会超内存,后来查阅发现异或的其中一个用法a ⊕ b ⊕ a = b。我的理解就像是阶乘(n-m+1)(n-m+2)……n=n!/m!。然后我定义一个数组每一个数组元素根据下标来表示前几个数据的异或。每第l个数字到第r个数字的异或就可以表示为a[l-1]^a[r]既节省空间有节省时间。
2019年1月25日
最新推荐文章于 2024-08-28 16:07:17 发布