摘要: 题意: n个数m次查询,每次查询给出l,r求子区间异或和为k的个数。 题解: 预处理前缀异或和,因为是区间相减求满足的所以左区间要减1。要注意数组要开2e6因为两个1e6的数异或可能会更大,答案也要开long long。 #include <bits/stdc++.h> using namespac 阅读全文
posted @ 2018-03-19 20:19 Pneuis 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 题意: m次查询。每次查询范围[L,R]中出现次数等于该数字的数字个数。 题解: 由于分块,在每次询问中,同一块时l至多移动根号n,从一块到另一块也是最多2倍根号n。对于r,每个块中因为同一块是按y排序,所以最多移动根号n;一共根号n个块。注意l和r要分开考虑。 要注意的是这道题需要离散一下数据。 阅读全文
posted @ 2018-03-12 20:29 Pneuis 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 题意: 给定范围[L, R] 和 k(1~10)求范围内数位的LIS(最长上升子序列)等于k的数的个数。 思路: 普通的LIS做法是对于当前的数,在模拟数列中找到第一个比他大的并替换掉。 在数位DP中需要状态压缩,其实对于每个数只有两种状态,即在模拟数列中或者不在。那么就可以用二进制(1<<10)来 阅读全文
posted @ 2017-12-26 23:27 Pneuis 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 题意: 求出所给范围内满足其数位上的奇数出现偶数次,数位上的偶数出现奇数次(或不出现)的数的个数。 思路: 对于0 ~ 9 每个数有3种情况。 1.没出现过 2.出现奇数次 3.出现偶数次 那么就可以用三进制来表示状态。 #include <iostream> #include <cstring> 阅读全文
posted @ 2017-12-26 21:17 Pneuis 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 题意: 在给定范围内(9*10^18)求出有多少个数满足被所有非零位的数整除。 思路: 可以先想到如果被所有非零位的数整除,那么就会被他们的lcm整除。 而lcm(1,2...9) = 2520. 即2520可以整除1 - 9中任意组合的lcm。 所以可以用%2520的值表示状态,最后用最终状态值% 阅读全文
posted @ 2017-12-14 23:34 Pneuis 阅读(163) 评论(0) 推荐(0) 编辑