思路
关键观察:将区间右端点从 i−1 扩展到 i 时,任何以 i 结尾的子区间的按位或,要么等于 ai,要么是某个以前缀结尾的按位或再与 ai 做一次 ∣。并且按位或只会“开新位”不会关掉已有位,因此对于固定右端点 i,不同的“以 i 结尾的子区间按位或结果”的种类数是有限的,至多与二进制位数相关。由于 ai≤109,二进制位数 B≤31,所以每个位置最多保留 O(B) 个不同的结果。
做法(在线去重):
-
维护两个集合:
- Sprev:所有“以前一个位置结尾”的按位或结果集合;
开通会员即可查看完整视频题解: 1.题目讲解 2.思路分析 3.逐行代码手写