链接

题意:给定长度为 \(n\) 的序列 A,每次求区间 \([l,r]\) 的乘积的欧拉函数

题解

考虑离线怎么搞,将询问按右端点排序,然后按顺序扫这个序列

对于每个 \(A_i\) ,枚举它的质因数,由于不同的质因数只算一次,所以我们只关心每个质数它最后一次出现的位置,开一棵线段树维护一下每个位置的质数,加入新的质数时,先把之前的删掉,再加新的

现在强制在线,可以开可持久化线段树维护一下

#include<bits/stdc++.h>
#define REP(i,a,b) for(int i(a);i<=(b);++i)
#define dbg(...) fprintf(stderr,__VA_ARGS__)
const int S=1<<18;
char ibuf[S],*iS,*iT;
#define gc (iS==iT?iT=ibuf+fread(iS=ibuf,1,S,stdin),iS==iT?EOF:*iS++:*iS++)
inline int read(){char c,p=0;int w;
while(isspace(c=gc));if(c=='-')p=1,c=gc;w=c&15;
while(isdigit(c=gc))w=w*10+(c&15);return p?-w:w;
} template<typename T,typename U>inline bool smin(T&x,const U&y){return x>y?x=y,1:0;}
template<typename T,typename U>inline bool smax(T&x,const U&y){return x<y?x=y,1:0;}
const int N=50005,M=1e6+999,p=1e6+777;
int n,pr[1105],pre[M],inv[M],mul[N];
bool np[1105];
struct node{int ls,rs,w;}t[N*100];
int rt[N],cnt;
inline void ins(int&o,int l,int r,int x,int v){
t[++cnt]=t[o];o=cnt;t[o].w=1ll*t[o].w*v%p;
if(l==r)return;int mid=l+r>>1;
x<=mid?ins(t[o].ls,l,mid,x,v):ins(t[o].rs,mid+1,r,x,v);
}
inline int ask(int o,int l,int r,int x){
if(x<=l)return t[o].w;
if(x>r)return 1;int mid=l+r>>1;
return 1ll*ask(t[o].ls,l,mid,x)*ask(t[o].rs,mid+1,r,x)%p;
}
signed main(){
n=read();int q=read();
REP(i,2,1100){
if(!np[i])pr[++pr[0]]=i;
REP(j,1,pr[0]){
if(1ll*i*pr[j]>1100)break;
np[i*pr[j]]=1;
if(i%pr[j]==0)break;
}
}
inv[0]=inv[1]=mul[0]=t[0].w=1;
REP(i,2,p-1)inv[i]=1ll*(p-p/i)*inv[p%i]%p;
REP(i,1,n){
int x=read();mul[i]=1ll*mul[i-1]*x%p;rt[i]=rt[i-1];
REP(j,1,pr[0]){
if(pr[j]*pr[j]>x)break;
if(x%pr[j])continue;
if(pre[pr[j]])ins(rt[i],1,n,pre[pr[j]],1ll*pr[j]*inv[pr[j]-1]%p);
ins(rt[i],1,n,pre[pr[j]]=i,1ll*(pr[j]-1)*inv[pr[j]]%p);
do x/=pr[j];while(x%pr[j]==0);
}
if(x>1){
if(pre[x])ins(rt[i],1,n,pre[x],1ll*x*inv[x-1]%p);
ins(rt[i],1,n,pre[x]=i,1ll*(x-1)*inv[x]%p);
}
}
int ans=0;
while(q--){
int l=read()^ans,r=read()^ans;
printf("%d\n",ans=1ll*mul[r]*inv[mul[l-1]]%p*ask(rt[r],1,n,l)%p);
}
return 0;
}

[BZOJ4026]dC Loves Number Theory 欧拉函数+线段树的更多相关文章

  1. [BZOJ4026]dC Loves Number Theory(线段树)

    根据欧拉函数的定义式可知,可以先算出a[l]*a[l+1]*...*a[r]的值,然后枚举所有存在的质因子*(p-1)/p. 发现这里区间中一个质因子只要计算一次,所以指计算“上一个同色点在区间外”的 ...

  2. LightOJ 1370 Bi-shoe and Phi-shoe 欧拉函数+线段树

    分析:对于每个数,找到欧拉函数值大于它的,且标号最小的,预处理欧拉函数,然后按值建线段树就可以了 #include <iostream> #include <stdio.h> ...

  3. loj1370(欧拉函数+线段树)

    传送门:Bi-shoe and Phi-shoe 题意:给出多个n(1<=n<=1e6),求满足phi(x)>=n的最小的x之和. 分析:先预处理出1~1e6的欧拉函数,然后建立一颗 ...

  4. BZOJ4026: dC Loves Number Theory

    Description  dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯 竭的水题资源.    给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所 ...

  5. LOJ #2142. 「SHOI2017」相逢是问候(欧拉函数 + 线段树)

    题意 给出一个长度为 \(n\) 的序列 \(\{a_i\}\) 以及一个数 \(p\) ,现在有 \(m\) 次操作,每次操作将 \([l, r]\) 区间内的 \(a_i\) 变成 \(c^{a_ ...

  6. bzoj4869: [Shoi2017]相逢是问候(欧拉函数+线段树)

    这题是六省联考的...据说数据还出了点锅,心疼六省选手QAQ 首先要知道扩展欧拉定理... 可以发现每次区间操作都会使模数进行一次phi操作,而一个数最多取logp次phi就会变成1,这时后面的指数就 ...

  7. [LNOI] 相逢是问候 || 扩展欧拉函数+线段树

    原题为2017六省联考的D1T3 给出一个序列,m次操作,模数p和参数c 操作分为两种: 1.将[l,r]区间内的每个数x变为\(c^x\) 2.求[l,r]区间内数的和%p 首先,我们要了解一些数论 ...

  8. [bzoj4026]dC Loves Number Theory_主席树_质因数分解_欧拉函数

    dC Loves Number Theory 题目大意:dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源. 给定一个长度为 n的正整数序列A,有q次询问 ...

  9. 【BZOJ4026】dC Loves Number Theory 分解质因数+主席树

    [BZOJ4026]dC Loves Number Theory Description  dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源.    给 ...

随机推荐

  1. oracle根据成绩排名查询某个名次段的人员

    先说一下表结构  名字name  分数fenshu   表名test1,以下查询的是成绩排名为第三名和第四名,这个模板让你查随意排名段的人 select name,fenshu,mc from (se ...

  2. iOS面试总结(待完善)

    闲的没事总结一下面试资料,先列个大纲,然后慢慢填充,一步步完善,反正也不急. 1.基本属性 2.KVC与KVO 3.代理与block 4.多线程:NSThread,GCD,NSOperation 5. ...

  3. [LOJ2422]【NOIP2015】斗地主

    大名鼎鼎的NOIP2015D1T3 题意: 由于一些众所周知的原因,没有完整题面…… 给你一副斗地主的手牌(牌数<=23),问最少要几次能出完: 包含双王,没有癞子,连对要三连对以上,可以直接出 ...

  4. HDU-4370 '0 or 1' 最短路 要考虑连通性

    题目链接:https://cn.vjudge.net/problem/HDU-4370 题意 给一个矩阵C(nn),要我们找到一个矩阵X(nn),满足以下条件: X_{12}+X_{13}+...X_ ...

  5. BZOJ 3530 [SDOI2014]数数 (Trie图/AC自动机+数位DP)

    题目大意:略 裸的AC自动机+数位DP吧... 定义f[i][x][0/1]表示已经匹配到了第i位,当前位置是x,0表示没到上限,1到上限,此时数是数量 然而会出现虚拟前导零,即前几位没有数字的情况, ...

  6. BZOJ 1951 [SDOI2010]古代猪文 (组合数学+欧拉降幂+中国剩余定理)

    题目大意:求$G^{\sum_{m|n} C_{n}^{m}}\;mod\;999911659\;$的值$(n,g<=10^{9})$ 并没有想到欧拉定理.. 999911659是一个质数,所以 ...

  7. malloc 和free例程

    #include <stdio.h>#include <stdlib.h>int main(){int a;scanf("%d",&a);int * ...

  8. 搭建app自动化测试环境(一)

    ①:想实现自动化,第一步先安装python然后第二步安装selenium, 第三步安装JDK,然后J配置好JDK环境变量 JAVA_HOME    C:\Program Files\Java\jdk1 ...

  9. [Javascript] Simplify Creating Immutable Data Trees With Immer

    Immer is a tiny library that makes it possible to work with immutable data in JavaScript in a much m ...

  10. 页面头部带loading进度指示的jQuery滚动页面特效

    这是一款非常有用且效果非常酷的jQuery页面头部带loading进度指示的滚动页面特效. 该特效在页面滚动的时候页面头部有Loading进度条指示当前页面滚动的位置,这能够让用户知道当前阅读的地方距 ...