根号分治例题

哈希冲突

题意: 求 ∑ i = 0 i ∗ x + y < = n a [ i ∗ x + y ] \sum_{i = 0}^{i*x+y<=n} a[i*x+y] i=0ix+y<=na[ix+y]为多少,单点修改

根号分治, 首先发现数据范围都为 1 e 5 1e5 1e5级别的,考虑如何入手这道题
对于查询
1.发现如果 x > n x > \sqrt{n} x>n ,那么暴力调的时间复杂度最多为 n n n\sqrt{n} nn ,
2.如果 x < n x < \sqrt{n} x<n ,我们发现可以进行预处理, f [ i ] [ j ] f[i][j] f[i][j]表示 m o d i mod i modi,为 j j j s u m sum sum, n n n\sqrt{n} nn 预处理,

对于修改
情况一 : 暴力修改
情况二 : 暴力修改
最差时间复杂度 O ( n n l o g n ) O(n\sqrt{n}log_n) O(nn logn)

Time to Raid Cowavans

和上一题一模一样,只是规定了一个起点,前缀作差+差分即可

Array Queries

相同的处理方法

[ARC150B] Make Divisible

整除分块
由于要计算 k ( B + Y ) = = A + X k(B + Y) == A + X k(B+Y)==A+X, ( X + Y ) m i n (X +Y)_{min} (X+Y)min
可以得到 k = ⌈ A B + Y ⌉ k=\left \lceil \frac{A}{B+Y} \right \rceil k=B+YA
由整除分块可得,最多有 n \sqrt{n} n 个不同的 k k k
由于

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值