logtrick:解决子数组GCD/OR/AND
本文最后更新于 194 天前,如有失效请评论区留言。

题解
模板:

cnt = dict()
for i, x in enumerate(nums):
    cnt = {or_ | x : left for or_, left in cnt.items()}
    cnt[x] = i
    for or_, left in cnt.items():
        ......

练习:https://www.lanqiao.cn/problems/1595/learning/?page=1&first_category_id=1&name=%E5%92%8C%E4%B8%8E
只过了一半,超时了

import sys
from itertools import accumulate
from collections import defaultdict

input = lambda: sys.stdin.readline().rstrip()
ii = lambda: int(input())
lii = lambda: list(map(int, input().split()))

def solve():
    n = ii() 
    arr = lii()
    cnt = defaultdict(list)
    ans = 0
    pre = list(accumulate(arr, initial=0))
    for i, x in enumerate(arr):
        temp_cnt = defaultdict(list)
        for oo in cnt:
            temp_cnt[oo * x].extend(cnt[oo])
        temp_cnt[x].append(i)
        for oo in cnt:
            for left in cnt[oo]:
                if pre[i + 1] - pre[left] == oo:
                    ans += 1
    return ans
print(solve())

[========]
扩展:
这类问题也可以使用ST表加二分查找
ST表:

class SparseTable:
    def __init__(self, data: list, func=lambda x, y: x | y):
        self.func = func
        self.st = [list(data)]
        i, n = 1, len(self.st[0])
        while 2 * i <= n:
            pre = self.st[-1]
            # 这里用的是倍增的思路,比如一步的时候知道 01 12 23, 两步的时候就是0123, 12是没有价值的
            self.st.append([func(pre[j], pre[j + i]) for j in range(n - 2 * i + 1)])
            i <<= 1
        # st 表的行i代表步长,列j代表左端点,比如st[1][2] 表示[2, 2+1]的统计值

    def query(self, begin: int, end: int):  # 查询闭区间[begin, end]的最大值
        lg = (end - begin + 1).bit_length() - 1
        return self.func(self.st[lg][begin], self.st[lg][end - (1 << lg) + 1])
版权声明:除特殊说明,博客文章均为大块肌原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇