arrays - 使用 And/Or 运算符最大化按位函数
问题描述
给定一个包含 N 个整数的数组 A。此外,我们得到另一个整数 K。对于任何 1<=L<=R<=N(假设 1 个基索引),在此数组上定义的函数很少:
And(L,R) : A[L] AND A[L+1] ... AND A[R] (AND is Bitwise And operation)
Or(L,R) : A[L] OR A[L+1] ... A[R] (OR is Bitwise Or operation)
Sum(L,R) : A[L] + A[L+1] ... A[R]
我们还要给出另一个函数 F(L,R),其
- 如果 And(L,R) < K,则输出为0
- 否则它的输出是Or(L,R) + Sum(L,R) if And(L,R)>=K
现在我们要找到这个新函数的最大值 F(L,R)。此外,由于输出可能非常大,因此需要计算模 1000000007
示例:给定一个包含 4 个元素 A = [1,4,5,4] 且 K=2 的数组。答案是 18
解释: F(L,R) 的最大值是 F(2,4)
And(2,4) = 4 AND 5 AND 4 => 4 (And 4 is greater than K, i.e 2)
Or(2,4) = 4 OR 5 OR 4 => 5
Sum(2,4) = 4 + 5 + 4 => 13
F(2,4) = 5 + 13 => 18
为每对 L 和 R 计算 F 函数是我现在能够想到的解决这个问题的唯一方法。但是 N 可以增长到 100000。所以每对都不是最好的方法。有什么建议可以在 O(N) 或 O(N*LogN) 复杂度中解决这个问题?
解决方案
推荐阅读
- spring-boot - 在 Spring Boot 应用程序中使用 Micrometer 测量 HTTP 性能
- javascript - 缩小 BeforeUnload 以仅在字段更改或更新时触发
- c++ - 为什么这不起作用?(大括号初始化引用)
- android - Android中线程之间的资源竞争
- c# - 如何优化字符串重写规则程序
- handlebars.js - 如何将车把转换为我在下面提到的 ejs
- python - 如何为列表中的项目分配值?
- python - 如何在字符串中添加单词?
- mysql - 如何将 JSON 对象转换为 MySQL 行?
- stan - rstan 包中有函数 check_rhat() 吗?