Code:

#include <bits/stdc++.h>
#define ll long long
#define maxn 50207
#define setIO(s) freopen(s".in","r",stdin)
#define mod 1000777
using namespace std;
struct Tree
{
int tot;
int lson[maxn*270],rson[maxn*270];
ll mul[maxn*270];
int ins(int x,int l,int r,int p,ll v)
{
int o=++tot;
lson[o]=lson[x],rson[o]=rson[x];
if(x) mul[o]=mul[x]*v%mod;
else mul[o]=v;
if(l==r) return o;
int mid=(l+r)>>1;
if(p<=mid) lson[o]=ins(lson[x],l,mid,p,v);
else rson[o]=ins(rson[x],mid+1,r,p,v);
return o;
}
ll query(int x,int l,int r,int L,int R)
{
if(l>=L&&r<=R) return mul[x];
ll re=1;
int mid=(l+r)>>1;
if(L<=mid) re=re*query(lson[x],l,mid,L,R)%mod;
if(R>mid) re=re*query(rson[x],mid+1,r,L,R)%mod;
return re;
}
}tr;
int cnt,n,m;
int prime[1000004],vis[1000004],pre[1000006],rt[maxn],cur[maxn];
ll arr[maxn],mul[maxn];
ll qpow(ll base,ll k)
{
ll re=1;
while(k)
{
if(k&1) re=re*base%mod;
base=base*base%mod;
k>>=1;
}
return re;
}
void Initialize(int N)
{
for(int i=2;i<=N;++i)
{
if(!vis[i]) prime[++cnt]=i;
for(int j=1;j<=cnt&&1ll*prime[j]*i<=N;++j)
{
vis[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
for(int i=1;i<=n;++i)
{
int x=arr[i],cc=0;
rt[i]=rt[i-1];
if(x==1)
{
rt[i]=tr.ins(rt[i-1],1,n,i,1);
continue;
}
cur[++cc]=rt[i];
for(int j=1;j<=cnt&&1ll*prime[j]*prime[j]<=x;++j)
{
if(x%prime[j]==0)
{
if(pre[prime[j]])
{
cur[cc+1]=tr.ins(cur[cc],1,n,pre[prime[j]],1ll*prime[j]*qpow((prime[j]-1), mod-2)%mod);
++cc;
}
cur[cc+1]=tr.ins(cur[cc],1,n,pre[prime[j]]=i,1ll*(prime[j]-1)*qpow(prime[j],mod-2)%mod);
++cc;
while(x%prime[j]==0) x/=prime[j];
}
}
if(x>1)
{
if(pre[x])
{
cur[cc+1]=tr.ins(cur[cc],1,n,pre[x],1ll*x*qpow((x-1), mod-2)%mod);
++cc;
}
cur[cc+1]=tr.ins(cur[cc],1,n,pre[x]=i,1ll*(x-1)*qpow(x,mod-2)%mod);
++cc;
}
rt[i]=cur[cc];
for(int i=1;i<=cc;++i) cur[i]=0;
}
}
int main()
{
// setIO("input");
scanf("%d%d",&n,&m);
int mx=0;
mul[0]=1;
for(int i=1;i<=n;++i)
{
scanf("%lld",&arr[i]);
mul[i]=mul[i-1]*arr[i]%mod;
mx=max(mx, (int)arr[i]);
}
Initialize(mx);
ll lastans=0;
for(int i=1;i<=m;++i)
{
// lastans=0;
int l,r;
scanf("%d%d",&l,&r);
l^=lastans,r^=lastans;
ll rev=qpow(mul[l-1],mod-2);
lastans=mul[r]*rev%mod*tr.query(rt[r],1,n,l,r)%mod;
printf("%lld\n",lastans);
}
return 0;
}

  

BZOJ 4026: dC Loves Number Theory 可持久化线段树 + 欧拉函数 + 数学的更多相关文章

  1. 【bzoj4026】dC Loves Number Theory 可持久化线段树

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

  2. bzoj 4026 dC Loves Number Theory 主席树+欧拉函数

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

  3. bzoj 4026 dC Loves Number Theory

    把我写吐了 太弱了 首先按照欧拉函数性质 我只需要统计区间不同质数个数就好了 一眼主席树 其次我被卡了分解质因数这里 可以通过质数筛时就建边解决 不够灵性啊,不知道如何改 #include<bi ...

  4. BZOJ 4026 dC Loves Number Theory (主席树+数论+欧拉函数)

    题目大意:给你一个序列,求出指定区间的(l<=i<=r) mod 1000777 的值 还复习了欧拉函数以及线性筛逆元 考虑欧拉函数的的性质,(l<=i<=r),等价于 (p[ ...

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

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

  6. BZOJ 3813--奇数国(线段树&欧拉函数&乘法逆元&状态压缩)

    3813: 奇数国 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 755  Solved: 432[Submit][Status][Discuss] ...

  7. BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数

    BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数 Description  dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯 竭 ...

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

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

  9. [BZOJ4026]dC Loves Number Theory 欧拉函数+线段树

    链接 题意:给定长度为 \(n\) 的序列 A,每次求区间 \([l,r]\) 的乘积的欧拉函数 题解 考虑离线怎么搞,将询问按右端点排序,然后按顺序扫这个序列 对于每个 \(A_i\) ,枚举它的质 ...

随机推荐

  1. TCP的三次握手过程

    TCP::传输控制协议(Transmission Control Protocol )     是一种面相连接的.可靠的.基于字节流的 传输层通信协议. TCP是一种面相连接的协议.其显著的特点就是在 ...

  2. 记一次Python pip安装失败的总结

    pip 安装失败时,可能换此方法可解决1.升级pip版本,这个一般会主动提示python3 -m pip install --upgrade pip2.修改pip源,默认的pip源速度实在无法忍受,或 ...

  3. Web高效管理多个项目的SVN仓库

    转至:https://www.jianshu.com/p/a0af00642585 采用方案 Linux+Apache+Subversion+MySQL+JDK+Tomcat+Svnadmin 目录 ...

  4. Spring Security Session Time Out

    最近在用Spring Security做登录管理,登陆成功后,页面长时间无操作,超过session的有效期后,再次点击页面操作,页面无反应,需重新登录后才可正常使用系统. 为了优化用户体验,使得在se ...

  5. C语言第十二周作业

        这个作业属于那个课程 C语言程序设计II 这个作业要求在哪 https://edu.cnblogs.com/campus/zswxy/computer-scienceclass3-2018/h ...

  6. 【暑假培训1】test1

    T1: 30pts:直接暴力三层循环枚举 就就就先不写代码了qwq: 70pts: 因为X+Y+Z==0 所以我们可以考虑枚举X和Y,然后利用↑式子求出Z=-X-Y: 然后touli xcg的70pt ...

  7. [LeetCode] 82. 删除排序链表中的重复元素 II

    题目链接 : https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/ 题目描述: 给定一个排序链表,删除所有含有 ...

  8. honpeyhonepy

    2019.09.15 简历编辑功能: 2019.09.23 爬虫功能(智联招聘) 2.1 AI同步功能 2019.10.08 登录功能(包括普通用户登录.管理员.招聘人员) 2019.11.10 鉴权 ...

  9. Docker Compose 部署 Redis 及原理讲解 | 懒人屋

    原文:Docker Compose 部署 Redis 及原理讲解 | 懒人屋 Docker Compose 部署 Redis 及原理讲解  4.4k  字    16  分钟    2019-10-1 ...

  10. PHP curl拓展的介绍和使用

    curl_setopt($ch, CURLOPT_URL, 'http://www.baidu.com/');//请求url地址curl_setopt($ch, CURLOPT_HEADER, 0); ...