[BZOJ4026]dC Loves Number Theory(线段树)
根据欧拉函数的定义式可知,可以先算出a[l]*a[l+1]*...*a[r]的值,然后枚举所有存在的质因子*(p-1)/p。
发现这里区间中一个质因子只要计算一次,所以指计算“上一个同色点在区间外”的数。记录pre就是二维数点问题了,套路地用主席树即可。
被卡常。别的OJ过了BZOJ过不了,优化常数后别的OJ速度快一倍BZOJ还是过不了。
#include<cstdio>
#include<algorithm>
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
using namespace std; const int N=,M=,S=,mod=1e6+;
bool b[S];
int n,Q,mx,nd,l,r,tot,ans,idx[S],lst[S],rt[N],a[N],sm[N],p[S],v[M],ls[M],rs[M]; int ksm(int a,int b){
int res=;
for (; b; a=1ll*a*a%mod,b>>=)
if (b & ) res=1ll*res*a%mod;
return res;
} int inv(int x){ return ksm(x,mod-); } void init(int n){
rep(i,,n){
if (!b[i]) p[++tot]=i,idx[i]=tot;
for (int j=; j<=tot && p[j]*i<=n; j++){
b[p[j]*i]=;
if (i%p[j]==) break;
}
}
} void ins(int &x,int y,int L,int R,int pos,int k){
x=++nd; v[x]=v[y]; ls[x]=ls[y]; rs[x]=rs[y];
if (L==R){ v[x]=1ll*v[x]*(k-)%mod*inv(k)%mod; return; }
int mid=(L+R)>>;
if (pos<=mid) ins(ls[x],ls[y],L,mid,pos,k);
else ins(rs[x],rs[y],mid+,R,pos,k);
v[x]=1ll*v[ls[x]]*v[rs[x]]%mod;
} int que(int x,int y,int L,int R,int pos){
if (!x && !y) return ;
if (L==R) return 1ll*v[y]*inv(v[x])%mod;
int mid=(L+R)>>;
if (pos<=mid) return que(ls[x],ls[y],L,mid,pos);
else return 1ll*v[ls[y]]*inv(v[ls[x]])%mod*que(rs[x],rs[y],mid+,R,pos)%mod;
} int main(){
scanf("%d%d",&n,&Q); sm[]=; v[]=;
rep(i,,n) scanf("%d",&a[i]),sm[i]=1ll*sm[i-]*a[i]%mod,mx=max(mx,a[i]);
init(mx);
rep(i,,n){
rt[i]=rt[i-]; int t=a[i];
for (int j=; j<=tot && p[j]*p[j]<=t; j++)
if (t%p[j]==){
ins(rt[i],rt[i],,n,lst[j],p[j]); lst[j]=i;
while (t%p[j]==) t/=p[j];
}
if (t>) ins(rt[i],rt[i],,n,lst[idx[t]],t),lst[idx[t]]=i;
}
rep(i,,Q){
scanf("%d%d",&l,&r); l^=ans; r^=ans;
printf("%d\n",ans=(1ll*sm[r]*inv(sm[l-])%mod*que(rt[l-],rt[r],,n,l-)%mod));
}
return ;
}
[BZOJ4026]dC Loves Number Theory(线段树)的更多相关文章
- [bzoj4026]dC Loves Number Theory_主席树_质因数分解_欧拉函数
dC Loves Number Theory 题目大意:dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源. 给定一个长度为 n的正整数序列A,有q次询问 ...
- [BZOJ4026]dC Loves Number Theory 欧拉函数+线段树
链接 题意:给定长度为 \(n\) 的序列 A,每次求区间 \([l,r]\) 的乘积的欧拉函数 题解 考虑离线怎么搞,将询问按右端点排序,然后按顺序扫这个序列 对于每个 \(A_i\) ,枚举它的质 ...
- BZOJ4026: dC Loves Number Theory
Description dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯 竭的水题资源. 给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所 ...
- bzoj 4026 dC Loves Number Theory 主席树+欧拉函数
题目描述 dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源.给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所有元素乘积的φ(φ(n)代 ...
- BZOJ 4026 dC Loves Number Theory (主席树+数论+欧拉函数)
题目大意:给你一个序列,求出指定区间的(l<=i<=r) mod 1000777 的值 还复习了欧拉函数以及线性筛逆元 考虑欧拉函数的的性质,(l<=i<=r),等价于 (p[ ...
- 【BZOJ4026】dC Loves Number Theory 分解质因数+主席树
[BZOJ4026]dC Loves Number Theory Description dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源. 给 ...
- 【bzoj4026】dC Loves Number Theory 可持久化线段树
题目描述 dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源. 给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所有元素乘积的φ(φ(n ...
- BZOJ 4026: dC Loves Number Theory 可持久化线段树 + 欧拉函数 + 数学
Code: #include <bits/stdc++.h> #define ll long long #define maxn 50207 #define setIO(s) freope ...
- bzoj 4026 dC Loves Number Theory
把我写吐了 太弱了 首先按照欧拉函数性质 我只需要统计区间不同质数个数就好了 一眼主席树 其次我被卡了分解质因数这里 可以通过质数筛时就建边解决 不够灵性啊,不知道如何改 #include<bi ...
随机推荐
- [csp-201809-3]元素选择器-编译原理
声明:同样是参考照抄hyh学长的代码!(有问题我马上删这篇emm 题目链接:http://118.190.20.162/view.page?gpid=T77 题面: 这棵树的样子(同样是来自学长的图) ...
- 统计oracle表中字段的个数
select count(column_name) from user_tab_columns where table_name='emp' dba权限对应的视图是dba_tab_columns 和a ...
- 转一篇:Reactor模式
转载自:http://www.blogjava.net/DLevin/archive/2015/09/02/427045.html 前记 第一次听到Reactor模式是三年前的某个晚上,一个室友突然跑 ...
- shell source命令说明
当我修改了/etc/profile文件,我想让它立刻生效,而不用重新登录:这时就想到用source命令,如:source /etc/profile对source进行了学习,并且用它与sh 执行脚本进行 ...
- 【题解】BZOJ 3065: 带插入区间K小值——替罪羊树套线段树
题目传送门 题解 orz vfk的题解 3065: 带插入区间K小值 系列题解 一 二 三 四 惨 一开始用了一种空间常数很大的方法,每次重构的时候merge两颗线段树,然后无限RE(其实是MLE). ...
- linux/centos定时任务cron
https://www.cnblogs.com/p0st/p/9482167.html cron: crond进程 crontab修改命令 * * * * * command parameter & ...
- Spring Cloud Feign 输出日志
还需要在application 文件中配置: #feign调用日志输出logging.level.cn.XXX=DEBUG Logger.Level下面有几种级别. BASIC : 只输出 请求URL ...
- Java跨域问题的处理
1,JavaScript由于安全性方面的考虑,不允许页面跨域调用其他页面的对象,那么问题来了,什么是跨域问题? 答:这是由于浏览器同源策略的限制,现在所有支持JavaScript的浏览器都使用了这个策 ...
- scrapy使用PhantomJS和selenium爬取数据
1.phantomjs 安装 下载:http://phantomjs.org/download.html 解压: tar -jxvf phantomjs--linux-x86_64.tar.bz2 重 ...
- Windows内核执行体对象管理器的操作过程与分析
我之前写过一个有关于对象管理的读书笔记.但是这篇文章与前面的不同,这是我个人对对象管理器到底是什么的一个分析,而且也是直接对WRK代码进行的阅读. 执行体对象即我们通常所言的内核对象,我们知道Wind ...