BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数
BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数
Description
Input
第一行,两个正整数,N,Q,表示序列的长度和询问的个数。
Output
Q行,对于每个询问输出一个整数。
Sample Input
3 7 10 10 5
3 4
42 44
241 242
14 9
1201 1201
0 6
245 245
7 7
6 1
1203 1203
Sample Output
240
12
1200
2
240
4
4
1200
4
HINT
1 <= N <= 50000
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- typedef long long ll;
- const int mod=1000777;
- #define N 50050
- #define M 1005050
- int inv[M],n,m,a[N];
- int prime[M],cnt,vis[M],s[N],root[N],tot,mul[N*100],lst[M],ls[N*100],rs[N*100],ans,mx;
- void init() {
- int i,j;
- for(i=2;i<=mx;i++) {
- if(!vis[i]) prime[++cnt]=i;
- for(j=1;j<=cnt&&i*prime[j]<=mx;j++) {
- vis[i*prime[j]]=1;
- if(i%prime[j]==0) break;
- }
- }
- inv[1]=1;
- for(i=2;i<mod;i++) inv[i]=ll(mod-(mod/i))*inv[mod%i]%mod;
- }
- void insert(int l,int r,int v,int c,int &y,int x) {
- y=++tot;
- mul[y]=ll(mul[x])*c%mod;
- if(l==r) return ;
- int mid=(l+r)>>1;
- if(v<=mid) rs[y]=rs[x],insert(l,mid,v,c,ls[y],ls[x]);
- else ls[y]=ls[x],insert(mid+1,r,v,c,rs[y],rs[x]);
- }
- int query(int l,int r,int x,int y,int p) {
- if(x<=l&&y>=r) return mul[p];
- int mid=(l+r)>>1,re=1;
- if(x<=mid) re=ll(re)*query(l,mid,x,y,ls[p])%mod;
- if(y>mid) re=ll(re)*query(mid+1,r,x,y,rs[p])%mod;
- return re;
- }
- int main() {
- scanf("%d%d",&n,&m);
- int i,j,x,y;
- mul[0]=1;
- for(i=1;i<=n;i++) scanf("%d",&a[i]),mx=max(mx,a[i]);
- init();
- for(s[0]=1,i=1;i<=n;i++) {
- // scanf("%d",&a[i]);
- // printf("%d:\n",a[i]);
- int tmp=a[i]; root[i]=root[i-1];
- if(a[i]==1) {
- s[i]=s[i-1]; continue;
- }
- for(j=1;j<=cnt&&prime[j]*prime[j]<=tmp;j++) {
- if(tmp%prime[j]==0) {
- // printf(" %d ",prime[j]);
- if(lst[prime[j]]) insert(1,n,lst[prime[j]],ll(prime[j])*inv[prime[j]-1]%mod,root[i],root[i]);
- insert(1,n,i,ll(prime[j]-1)*inv[prime[j]]%mod,root[i],root[i]);
- lst[prime[j]]=i;
- while(tmp%prime[j]==0) tmp/=prime[j];
- }
- }
- if(tmp!=1) {
- if(lst[tmp]) insert(1,n,lst[tmp],ll(tmp)*inv[tmp-1]%mod,root[i],root[i]);
- insert(1,n,i,ll(tmp-1)*inv[tmp]%mod,root[i],root[i]);
- lst[tmp]=i;
- }
- // puts("");
- s[i]=ll(s[i-1])*a[i]%mod;
- }
- // ans=40;
- while(m--) {
- scanf("%d%d",&x,&y);
- x^=ans; y^=ans;
- if(x>y) swap(x,y);
- printf("%d\n",ans=ll(s[y])*inv[s[x-1]]%mod*query(1,n,x,y,root[y])%mod);
- }
- }
- /*
- 5 10
- 3 7 10 10 5
- 3 4
- 42 44
- 241 242
- 14 9
- 1201 1201
- 0 6
- 245 245
- 7 7
- 6 1
- 1203 1203
- */
BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数的更多相关文章
- bzoj 4026 dC Loves Number Theory 主席树+欧拉函数
题目描述 dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源.给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所有元素乘积的φ(φ(n)代 ...
- BZOJ 3813--奇数国(线段树&欧拉函数&乘法逆元&状态压缩)
3813: 奇数国 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 755 Solved: 432[Submit][Status][Discuss] ...
- [bzoj3813] 奇数国 [线段树+欧拉函数]
题面 传送门 思路 这题目是真的难读......阅读理解题啊...... 但是理解了以后就发现,题目等价于: 给你一个区间,支持单点修改,以及查询一段区间的乘积的欧拉函数值,这个答案对19961993 ...
- 【bzoj3813】: 奇数国 数论-线段树-欧拉函数
[bzoj3813]: 奇数国 题意:给定一个序列,每个元素可以分解为最小的60个素数的形式.(x=p1^k1*p2^k2*......p60^k60)(p1=2,p2=3,…,p60=281) 支持 ...
- Please, another Queries on Array?(Codeforces Round #538 (Div. 2)F+线段树+欧拉函数+bitset)
题目链接 传送门 题面 思路 设\(x=\prod\limits_{i=l}^{r}a_i\)=\(\prod\limits_{i=1}^{n}p_i^{c_i}\) 由欧拉函数是积性函数得: \[ ...
- 线段树+欧拉函数——cf1114F
调了半天,写线段树老是写炸 /* 两个操作 1.区间乘法 2.区间乘积询问欧拉函数 欧拉函数计算公式 phi(mul(ai))=mul(ai) * (p1-1)/p1 * (p2-1)/p2 * .. ...
- 【BZOJ 3772】精神污染 主席树+欧拉序
这道题的内存…………………真·精神污染……….. 这道题的思路很明了,我们就是要找每一个路径包含了多少其他路径那么就是找,有多少路径的左右端点都在这条路径上,对于每一条路径,我们随便选定一个端点作为第 ...
- BZOJ 4026: dC Loves Number Theory 可持久化线段树 + 欧拉函数 + 数学
Code: #include <bits/stdc++.h> #define ll long long #define maxn 50207 #define setIO(s) freope ...
- Please, another Queries on Array? CodeForces - 1114F (线段树,欧拉函数)
这题刚开始看成求区间$\phi$和了........先说一下区间和的做法吧...... 就是说将题目的操作2改为求$(\sum\limits_{i=l}^{r}\phi(a[i]))\%P$ 首先要知 ...
随机推荐
- flask的restful api模块flask_restful和认证模块flask_httpauth
参考: 1.https://zhuanlan.zhihu.com/p/24629177 2.https://github.com/shengulong/LearnPython/blob/master/ ...
- 记录一下:关于mysql数据误删除恢复的问题
大概看来几篇博客: 1.delete的可以通过回滚(rollback)的方式恢复;但是前提是,你的数据表引擎是InnoDB而不是MyISAM,而且操作不是自动提交的 但是这种方式不可以恢复trunca ...
- 关于Gradle配置的小结
前言 使用 Android Studio 来开发 Android 工程的过程中,接触 Gradle 是不可避免的,比如配置签名.引入依赖等.那么 Gradle 到底是什么东西呢? Gradle 是一个 ...
- Spring延迟加载
如下内容引用自:http://www.cnblogs.com/wcyBlog/p/3756624.html 1.Spring中lazy-init详解ApplicationContext实现的默认行为就 ...
- HTML+CSS要点
1.td占据多行 / 列时,其挤开的 td 不写(但是包裹 td 的 tr 要写) 2. display:td 的元素中的文本默认垂直不居中(table中的td中的文本是垂直居中的) 3.th虽然定义 ...
- AMD单桥主板上电时序的详细解释
3个待机条件: 1.桥需要得到待机电压:3.3V,1.5V/1.2V2.25M起振注:NV的RTC电路,一般不会导致时序故障,都可以出CPURST#3.PWRGD-SB(即INTEL芯片组的RSMRS ...
- C#文件操作与编程
一:驱动器System.IO 软盘,优盘,光盘,硬盘 DriveInfo/DriveType DriveInfo:确定有关驱动器的信息:盘符,类型,可用空间 DriveType:确定DriveInfo ...
- 阿里云OSS对象存储 简单上传文件
不得不说阿里云的命名比较让人摸不着头脑,开始以为是文件存储NAS,弄了半天什么文件系统,挂载点的搞不明白.后来才搞清楚原来 对象存储OSS才是我需要的. 其中EndPoint就是画红框的部分,但是要加 ...
- 超越MySQL:三个流行MySQL分支的对比(转)
导读:尽管MySQL是最受欢迎的程序之一,但是许多开发人员认为有必要将其拆分成其他项目,并且每个分支项目都有自己的专长.该 需求以及Oracle对核心产品增长缓慢的担忧,导致出现了许多开发人员感兴趣的 ...
- Kubernetes对象之ReplicaSet
系列目录 说到ReplicaSet对象,得先说说ReplicationController(简称为RC).在旧版本的Kubernetes中,只有ReplicationController对象.它的主要 ...