链接

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

题解

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

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

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

  1. #include<bits/stdc++.h>
  2. #define REP(i,a,b) for(int i(a);i<=(b);++i)
  3. #define dbg(...) fprintf(stderr,__VA_ARGS__)
  4. const int S=1<<18;
  5. char ibuf[S],*iS,*iT;
  6. #define gc (iS==iT?iT=ibuf+fread(iS=ibuf,1,S,stdin),iS==iT?EOF:*iS++:*iS++)
  7. inline int read(){char c,p=0;int w;
  8. while(isspace(c=gc));if(c=='-')p=1,c=gc;w=c&15;
  9. while(isdigit(c=gc))w=w*10+(c&15);return p?-w:w;
  10. }
  11. template<typename T,typename U>inline bool smin(T&x,const U&y){return x>y?x=y,1:0;}
  12. template<typename T,typename U>inline bool smax(T&x,const U&y){return x<y?x=y,1:0;}
  13. const int N=50005,M=1e6+999,p=1e6+777;
  14. int n,pr[1105],pre[M],inv[M],mul[N];
  15. bool np[1105];
  16. struct node{int ls,rs,w;}t[N*100];
  17. int rt[N],cnt;
  18. inline void ins(int&o,int l,int r,int x,int v){
  19. t[++cnt]=t[o];o=cnt;t[o].w=1ll*t[o].w*v%p;
  20. if(l==r)return;int mid=l+r>>1;
  21. x<=mid?ins(t[o].ls,l,mid,x,v):ins(t[o].rs,mid+1,r,x,v);
  22. }
  23. inline int ask(int o,int l,int r,int x){
  24. if(x<=l)return t[o].w;
  25. if(x>r)return 1;int mid=l+r>>1;
  26. return 1ll*ask(t[o].ls,l,mid,x)*ask(t[o].rs,mid+1,r,x)%p;
  27. }
  28. signed main(){
  29. n=read();int q=read();
  30. REP(i,2,1100){
  31. if(!np[i])pr[++pr[0]]=i;
  32. REP(j,1,pr[0]){
  33. if(1ll*i*pr[j]>1100)break;
  34. np[i*pr[j]]=1;
  35. if(i%pr[j]==0)break;
  36. }
  37. }
  38. inv[0]=inv[1]=mul[0]=t[0].w=1;
  39. REP(i,2,p-1)inv[i]=1ll*(p-p/i)*inv[p%i]%p;
  40. REP(i,1,n){
  41. int x=read();mul[i]=1ll*mul[i-1]*x%p;rt[i]=rt[i-1];
  42. REP(j,1,pr[0]){
  43. if(pr[j]*pr[j]>x)break;
  44. if(x%pr[j])continue;
  45. if(pre[pr[j]])ins(rt[i],1,n,pre[pr[j]],1ll*pr[j]*inv[pr[j]-1]%p);
  46. ins(rt[i],1,n,pre[pr[j]]=i,1ll*(pr[j]-1)*inv[pr[j]]%p);
  47. do x/=pr[j];while(x%pr[j]==0);
  48. }
  49. if(x>1){
  50. if(pre[x])ins(rt[i],1,n,pre[x],1ll*x*inv[x-1]%p);
  51. ins(rt[i],1,n,pre[x]=i,1ll*(x-1)*inv[x]%p);
  52. }
  53. }
  54. int ans=0;
  55. while(q--){
  56. int l=read()^ans,r=read()^ans;
  57. printf("%d\n",ans=1ll*mul[r]*inv[mul[l-1]]%p*ask(rt[r],1,n,l)%p);
  58. }
  59. return 0;
  60. }

[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. BZOJ 2555 SubString(LCT+后缀树)

    喜闻乐见的LCT+SAM 此题要求动态插入,直接上后缀树.然后询问其实就是求一个节点的子树后缀结束节点的个数. 因为建立后缀树需要插入和删除,就直接上LCT.每次加入一个点,把它到根的路径加一 (现在 ...

  2. [USACO10FEB]吃巧克力Chocolate Eating

    题目:洛谷P2985. 题目大意:有n块巧克力要吃d天,并且只能按顺序吃.一块巧克力有一个开心值,吃了就能增加开心值.一个人初始开心值为0,且每天早上开心值变为原来的一半.问如何吃巧克力才能使开心值最 ...

  3. 6、Java类、对象、构造器、引用类型内存基本知识、引用类型值传递

    1.面向对象三大特征: 封装:encapsulation 继承:inheritance 多态:polymorphism 2.类中 数据特征(property):属性(attribute)静态的stat ...

  4. hibernate 或jpa 中使用 AliasToBeanResultTransformer 自定义类型转换ResultTransformer 下划线转驼峰

    jpa中使用 sql查询时,返回结果直接转为实体bean的实现, 需要自定义一个ResultTransformer,如下, import java.util.Arrays; import org.ap ...

  5. LeakCanary:简单粗暴的内存泄漏检測工具

    差点儿每一个程序猿在开发的过程中都会遇到内存泄漏.那么我们怎样检測到app是否哪里出现内存泄漏呢?square公司推出了一款简单粗暴的检測内存泄漏的工具-- LeakCanary 什么是内存泄漏? 内 ...

  6. [javase学习笔记]-6.7 封装

    这一节我们学习面向对象中的第一个特性,封装(encapsulation) 封装:是指隐藏对象的发生和实现细节,仅对外提供公共訪问方式. 那么什么是隐藏对象的实现细节? 我们来举例学习. 比方我们来定义 ...

  7. [GDKOI2010] 圈地计划(网络流)

    题2链接:https://www.luogu.org/problemnew/show/P1935 Description 最近房地产商GDOI(Group of Dumbbells Or Idiots ...

  8. P2264 情书(字符串hash90分)

    题目背景 一封好的情书需要撰写人全身心的投入.lin_toto同学看上了可爱的卡速米想对她表白,但却不知道自己写的情书是否能感动她,现在他带着情书请你来帮助他. 题目描述 为了帮助lin_toto,我 ...

  9. UI Framework-1: Aura Graphics Architecture

    Graphics Architecture Overview Each Aura Window owns a corresponding compositor layer. The layer tre ...

  10. DNS Prefetching

    For Developers‎ > ‎Design Documents‎ > ‎ DNS Prefetching 目录 1 Problem 2 Solution 3 Architectur ...