BZOJ 4026: dC Loves Number Theory 可持久化线段树 + 欧拉函数 + 数学
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 可持久化线段树 + 欧拉函数 + 数学的更多相关文章
- 【bzoj4026】dC Loves Number Theory 可持久化线段树
题目描述 dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源. 给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所有元素乘积的φ(φ(n ...
- bzoj 4026 dC Loves Number Theory 主席树+欧拉函数
题目描述 dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源.给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所有元素乘积的φ(φ(n)代 ...
- bzoj 4026 dC Loves Number Theory
把我写吐了 太弱了 首先按照欧拉函数性质 我只需要统计区间不同质数个数就好了 一眼主席树 其次我被卡了分解质因数这里 可以通过质数筛时就建边解决 不够灵性啊,不知道如何改 #include<bi ...
- 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 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源. 给 ...
- BZOJ 3813--奇数国(线段树&欧拉函数&乘法逆元&状态压缩)
3813: 奇数国 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 755 Solved: 432[Submit][Status][Discuss] ...
- BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数
BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数 Description dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯 竭 ...
- [BZOJ4026]dC Loves Number Theory(线段树)
根据欧拉函数的定义式可知,可以先算出a[l]*a[l+1]*...*a[r]的值,然后枚举所有存在的质因子*(p-1)/p. 发现这里区间中一个质因子只要计算一次,所以指计算“上一个同色点在区间外”的 ...
- [BZOJ4026]dC Loves Number Theory 欧拉函数+线段树
链接 题意:给定长度为 \(n\) 的序列 A,每次求区间 \([l,r]\) 的乘积的欧拉函数 题解 考虑离线怎么搞,将询问按右端点排序,然后按顺序扫这个序列 对于每个 \(A_i\) ,枚举它的质 ...
随机推荐
- python里一个class可以定义多个构造函数
不行,一个class只能有一个用于构造对象的__init__函数但python中的变量是无类型的,因此传给__init__的参数可以是任何类型python中的函数参数在定义时可以有默认值,可以让__i ...
- Jmeter 接口测试 响应结果中文是Unicode转为中文
1.增加一个后置处理器:BeanShell PostProcessor 内容如下: //获取响应代码Unicode编码的 String s2=new String(prev.getRes ...
- 【MM系列】SAP MM模块-BAPI:BAPI_GOODSMVT_CREATE的CODE分析
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-BAPI:BAPI ...
- note.js 引用jQuery,
1.安装jQuery npm install jquery 在自己的项目目录里面打开cmd进行安装 2.下面直接在js文件里面引用jQuery //调用jQuery来操作页面 const jsdom ...
- 【监控笔记】【3.1】DML(CDC)、DDL(DDL触发器)跟踪数据更改,数据库审计
关键词:数据库审计.DDL审计.DML审计 [监控笔记][3.1]DML(CDC).DDL(DDL触发器)跟踪数据更改 [1]DML(CDC) 2008及以上 https://www.cnblogs. ...
- Java GC日志
JVM 命令:-Xms5m -Xmx20m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseSerialGC [GC (Allocatio ...
- 利用中转输出表制作HijackDll
[原创]利用中转输出表制作HijackDll(附工具源码)作 者: baixinye时 间: 2012-08-05,16:48:45链 接: http://bbs.pediy.com/showthre ...
- 2019 360杯 re wp--Here are some big nums
测试文件:https://www.lanzous.com/i7303oh 1.准备 获取信息: 32位文件 2.IDA打开 找到主函数之后,反编译为伪C代码 int sub_404D70() { in ...
- linux用户管理(useradd、userdel、usermod、groupadd、groupdel、chage、passwd、chpasswd)
一.用户账户配置文件介绍 /etc/passwd 用户账户信息文件/etc/shadow 用户账户密码文件/etc/group 用户组信息文件/etc/gshadow 用户组密码所在文件(基本废弃)/ ...
- VB Open 函数详解 打开、关闭、读、写文件
(一)打开和关闭文件 1.顺序文件 打开顺序文件,我们可以使用Open语句.它的格式如下:Open pathname For [Input |Output |Append] As [ ...