题目名称 | 3738. 逆元数列 |
---|---|
输入输出 | invarray.in/out |
难度等级 | ★★ |
时间限制 | 1000 ms (1 s) |
内存限制 | 256 MiB |
测试数据 | 10 |
题目来源 | op_组撒头屯 于2022-08-11加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:5, 提交:10, 通过率:50% | ||||
lihaoze | 100 | 0.717 s | 14.98 MiB | C++ |
op_组撒头屯 | 100 | 0.929 s | 9.58 MiB | C++ |
HeSn | 100 | 1.227 s | 5.73 MiB | C++ |
yrtiop | 100 | 1.289 s | 5.27 MiB | C++ |
lihaoze | 100 | 1.353 s | 14.89 MiB | C++ |
yrtiop | 90 | 4.369 s | 5.27 MiB | C++ |
yrtiop | 70 | 4.366 s | 5.27 MiB | C++ |
yrtiop | 60 | 4.498 s | 5.27 MiB | C++ |
lihaoze | 40 | 6.144 s | 19.97 MiB | C++ |
lihaoze | 40 | 6.149 s | 10.08 MiB | C++ |
本题关联比赛 | |||
EYOI与SBOI开学欢乐赛14th |
关于 逆元数列 的近10条评论(全部评论) | ||||
---|---|---|---|---|
回复 @组撒头屯 :
线段树的话好像单次修改的时间复杂度就是 $O(n \log n)$,不太能过的样子 --------------------------------------------------------------------------- 好吧,看来是方法不对 | ||||
回复 @组撒头屯 : 没看出来这可以直接分块 qwq,用珂朵莉树,每隔一段时间重构一次,时间复杂度不太行(算了下大概是 $\mathcal O(n\sqrt{m}\log{\sqrt{m}})$ 的样子),而且因为我懒,实现得常数很大,如果常数小点或许(? 不开 O2 也能过
upd:看来是我查询的时候也把块拆开导致了不必要的重构,把查询改成暴力,重构时间拉长点就能过了 | ||||
回复 @Skylake :
实际上线段树应该也是可行的,但是竟然没人写
op_组撒头屯
2022-10-24 22:55
2楼
| ||||
@Skylake ,所以你写了个珂朵莉树?!
op_组撒头屯
2022-10-24 22:48
1楼
|
这是一道数据结构题。
给定质数 $p$ ,你需要维护一个长为 $n$ 的数列 $\{a_n\}$ ,有如下两种操作形式:
$1\ l\ r\ $,表示将 $a_l…a_r$ 的所有数变为其模 $p$ 的乘法逆元;
$2\ l\ r\ $,表示查询 $a_l…a_r$ 的和。
若整数 $b,p$ 互质,并且 $b|a$ (b能整除a),则存在一个整数 $x$ ,使得 $a/b≡a*x\ (mod\ p)$,我们称 $x$ 为 $b$ 模 $p$ 的乘法逆元(取模运算的乘法逆元)。
第一行三个整数 $n,m,p$。
第二行 $n$ 个数,表示初始的 $\{a_n\}$。
接下来 $m$ 行,每行三个整数 $opt,l,r$ ,表示一次操作,含义如上。 $opt∈\{1,2\}\ ,\ 1≤l≤r≤n$。
若干行,对于每一个操作$2$,输出查询的值。
4 2 5 1 2 3 4 1 1 3 2 1 4
10
输入输出样例2
初始: $\{1,2,3,4\}$
第一次操作后:$\{1,3,2,4\}$
对于 $20\%$ 数据,$1≤n,m≤10^2$;
对于 $40\%$ 数据,$1≤n,m≤10^3$;
对于 $100\%$ 数据,$1≤n,m≤10^5,p≤10^9+7\ ,\ 1≤a_i<p$;
$rsr$