File tree Expand file tree Collapse file tree 1 file changed +8
-4
lines changed Expand file tree Collapse file tree 1 file changed +8
-4
lines changed Original file line number Diff line number Diff line change @@ -421,10 +421,14 @@ func bitsCollection() {
421
421
}
422
422
423
423
//(接上)考虑乘法
424
- // 给一数组 a,元素均为正整数,求区间和等于区间积的区间个数
425
- // 核心思路是对于每个区间右端点,其对应的区间积不会超过 sum(a),且由于乘积至少要乘 2 才会变化,所以区间右端点对应的区间积至多有 O(log(sum(a))) 个不同的值
426
- // 而每个前缀和都是不同的,所以区间右端点对应的答案个数也至多有 O(log(sum(a))) 个
427
- // 因此总的答案个数至多为 O(nlog(sum(a)))
424
+ // 问题:给一数组 a,元素均为正整数,求区间和等于区间积的区间个数
425
+ // 我们来考虑对每个区间右端点,有多少个合法的区间左端点
426
+ // 核心思路是,对于每个满足题目要求的区间,其区间积不会超过 sum(a)
427
+ // 由于乘积至少要乘 2 才会变化,所以对于一个固定的区间右端点,不同的区间积至多有 O(log(sum(a))) 个
428
+ // 同时由于元素均为正数,所以对一个固定的区间右端点,区间左端点也至多有 O(log(sum(a))) 个
429
+ // 据此我们只需要在加入一个新的数后,去重并去掉区间积超过 sum(a) 的区间,就可以暴力做出此题
430
+ // 注:根据以上推导过程,我们还可以得出总的答案个数至多为 O(nlog(sum(a)))
431
+ // https://www.dotcpp.com/oj/problem2622.html
428
432
countSumEqMul := func (a []int ) (ans int ) {
429
433
tot := 0
430
434
for _ , v := range a {
You can’t perform that action at this time.
0 commit comments