jzoj4638-第三条跑道【欧拉函数,线段树】

正题


题目大意

要求支持区间乘和区间求∏φ(xi)\prod \varphi(x_i)φ(xi)


解题思路

首先φ(n)=n∗∏(pi−1pi)\varphi(n)=n*\prod (\frac{p_i-1}{p_i})φ(n)=n(pipi1)
我们定义xl,rx_{l,r}xl,r表示l∼rl\sim rlr的乘积ci,l,rc_{i,l,r}ci,l,rl∼rl\sim rlr区间中包含质因数pip_ipi的数字个数。
然后答案显然可以转化为
xl,r∗∏((pi−1)ci,l,rpici,l,r)x_{l,r}*\prod(\frac{(p_i-1)^{c_{i,l,r}}}{p_i^{c_{i,l,r}}})xl,r(pici,l,r(pi1)ci,l,r)

然后xl,rx_{l,r}xl,rci,l,rc_{i,l,r}ci,l,r都可以用线段树维护。

由于xi≤600x_i\leq 600xi600所以质因数数量是109109109个。

加上一个区间乘的线段树。

所以时间复杂度为:O(110∗(qlog⁡n))O(110*(q\log n))O(110(qlogn))


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
struct Treenode{ll l,r,w,lazy;
};
const ll N=1e4+1e2,XJQ=100000007;
ll n,a[N],m,pri[600],cnt;
bool v[600];
ll power(ll x,ll b)
{ll ans=1;while(b){if(b&1) ans=ans*x%XJQ;x=x*x%XJQ;b>>=1;}return ans;
}
struct Line_Cut_Tree{Treenode t[N*4];void build(ll x,ll l,ll r,ll val){t[x].l=l;t[x].r=r;if(l==r){t[x].w=(a[l]%val==0);return;}ll mid=(l+r)/2;build(x*2,l,mid,val);build(x*2+1,mid+1,r,val);t[x].w=t[x*2].w+t[x*2+1].w;}void downdata(ll x){if(!t[x].lazy) return;t[x*2].w=t[x*2].r-t[x*2].l+1;t[x*2].lazy=1;t[x*2+1].w=t[x*2+1].r-t[x*2+1].l+1;t[x*2+1].lazy=1;t[x].lazy=0;}ll ask(ll x,ll l,ll r){if(t[x].l==l&&t[x].r==r)return t[x].w;downdata(x);if(r<=t[x*2].r) return ask(x*2,l,r);else if(l>=t[x*2+1].l) return ask(x*2+1,l,r);else return ask(x*2,l,t[x*2].r)+ask(x*2+1,t[x*2+1].l,r);t[x].w=t[x*2].w+t[x*2+1].w;}void change(ll x,ll l,ll r){if(t[x].l==l&&t[x].r==r){t[x].lazy=1;t[x].w=t[x].r-t[x].l+1;return;}downdata(x);if(r<=t[x*2].r) change(x*2,l,r);else if(l>=t[x*2+1].l) change(x*2+1,l,r);else change(x*2,l,t[x*2].r),change(x*2+1,t[x*2+1].l,r);t[x].w=t[x*2].w+t[x*2+1].w;}
}Tree[120];
struct Line_Cut_Tree2{Treenode t[N*4];void build(ll x,ll l,ll r){t[x].lazy=1;t[x].l=l;t[x].r=r;if(l==r){t[x].w=a[l];return;}ll mid=(l+r)/2;build(x*2,l,mid);build(x*2+1,mid+1,r);t[x].w=t[x*2].w*t[x*2+1].w%XJQ;}void downdata(ll x){if(t[x].lazy==1) return;ll L1=t[x*2].r-t[x*2].l+1,L2=t[x*2+1].r-t[x*2+1].l+1;t[x*2].w=t[x*2].w*power(t[x].lazy,L1)%XJQ;t[x*2].lazy=t[x*2].lazy*t[x].lazy%XJQ;t[x*2+1].w=t[x*2+1].w*power(t[x].lazy,L2)%XJQ;t[x*2+1].lazy=t[x*2+1].lazy*t[x].lazy%XJQ;t[x].lazy=1;}ll ask(ll x,ll l,ll r){if(t[x].l==l&&t[x].r==r)return t[x].w;downdata(x);if(r<=t[x*2].r) return ask(x*2,l,r);else if(l>=t[x*2+1].l) return ask(x*2+1,l,r);else return ask(x*2,l,t[x*2].r)*ask(x*2+1,t[x*2+1].l,r)%XJQ;t[x].w=t[x*2].w*t[x*2+1].w%XJQ;}void change(ll x,ll l,ll r,ll val){if(t[x].l==l&&t[x].r==r){(t[x].lazy*=val)%=XJQ;(t[x].w*=power(val,r-l+1))%=XJQ;return;}downdata(x);if(r<=t[x*2].r) change(x*2,l,r,val);else if(l>=t[x*2+1].l) change(x*2+1,l,r,val);else change(x*2,l,t[x*2].r,val),change(x*2+1,t[x*2+1].l,r,val);t[x].w=t[x*2].w*t[x*2+1].w%XJQ;}
}Tre;
void Prime(ll x)
{for(ll i=2;i<=x;i++){if(v[i]) continue;pri[++cnt]=i;for(ll j=i;j<=x;j+=i)v[j]=1;}for(ll i=1;i<=cnt;i++)Tree[i].build(1,1,n,pri[i]); 
}
int main()
{scanf("%lld",&n);for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);Tre.build(1,1,n);Prime(600);scanf("%lld",&m);for(ll i=1;i<=m;i++){ll c,l,r,x,L;scanf("%lld%lld%lld",&c,&l,&r);L=r-l+1;if(c){ll ans=1,del=1;for(ll j=1;j<=cnt;j++){int E=Tree[j].ask(1,l,r);(ans*=power(pri[j]-1,E))%=XJQ;(del*=power(pri[j],E))%=XJQ;}(ans*=Tre.ask(1,l,r))%=XJQ; (ans*=power(del,XJQ-2))%=XJQ;printf("%lld\n",ans);}else{scanf("%lld",&x);for(ll j=1;j<=cnt;j++)if(!(x%pri[j]))Tree[j].change(1,l,r);Tre.change(1,l,r,x);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬虫基础5.24

request进阶第一步 1、爬取网页所有内容 import urllib.request fileurllib.request.urlopen(http://www.baidu.com) datafile.read() #读取全部 datalinefile.readline() #读取一行内容 print(data)添加请求头 java headers {user-agent: Mozilla/5.0 (Windows NT 1…

Tomcat面试题(2020最新版)

转载自 Tomcat面试题&#xff08;2020最新版&#xff09; Tomcat是什么&#xff1f; Tomcat 服务器Apache软件基金会项目中的一个核心项目&#xff0c;是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很…

.NET Core 已经实现了PHP JIT,现在PHP是.NET上的一门开发语言

12月23日&#xff0c;由开源中国联合中国电子技术标准化研究院主办的2017源创会年终盛典在北京万豪酒店顺利举行。在本次大会上&#xff0c;链家集团技术副总裁、PHP 开发组核心成员鸟哥发表了以 “ PHP Next: JIT ”为主题的演讲&#xff0c;分享了 PHP 的下一个性能提升的主要…

jzoj4637-大鱼海棠【博弈论】

正题 题目大意 一棵树&#xff0c;每次选择一个没有被覆盖点把其到根节点的路径全都覆盖。 没得选择的那个人输&#xff0c;求先手赢还是后手赢。 解题思路 先手必胜。 我们先不考虑点根节点&#xff0c;如果先手必败&#xff0c;那么点一下根节点就可以交换先后手。 如果先…

Java虚拟机(JVM)面试题(2020最新版)

转载自 Java虚拟机(JVM)面试题&#xff08;2020最新版&#xff09; Java内存区域 说一下 JVM 的主要组成部分及其作用&#xff1f; JVM包含两个子系统和两个组件&#xff0c;两个子系统为Class loader(类装载)、Execution engine(执行引擎)&#xff1b;两个组件为Runtime da…

ASP.NET Core中的OWASP Top 10 十大风险-跨站点脚本攻击 (XSS)

本博文翻译自&#xff1a;https://dotnetcoretutorials.com/2017/10/25/owasp-top-10-asp-net-core-cross-site-scripting-xss/在这篇文章的前几次迭代中&#xff0c;我用了一个很长的篇幅解释了什么是跨站脚本(XSS)。但在花了好几个小时来完善它之后&#xff0c;我觉得向你展示…

学习手记(2018.11.30~2019.6.6)——养老时间

文章目录φ\varphiφ的奥秘之1某不科学的知识二维费用自然の对数大法斐波那契数列与三角形BSTBSTBST大法好点阵迷踪CayleyCayleyCayley公式质嘤数分解の1费马小的妙用の1神仙の调和级数和与积的奥秘の一dpdpdpの费用提前计算法插板法不全的大全区间の或和 带 区间の异或φ\varp…

(C语言)请编写程序,计算1-1/2-1/3-1/4-.....-1/50的和。

代码如下&#xff1a; #include<stdio.h>int main() {float i,sum1;for(i2;i<50;i){sumsum-1/i;}printf("%f",sum); }注意这里用的是float&#xff0c;不能用int&#xff0c;否则像是1/2&#xff0c;1/3统统都是0&#xff0c;最终运行的结果也是0&#xff…

芋道 Spring Boot 自动配置原理

转载自 芋道 Spring Boot 自动配置原理 1. 概述 友情提示&#xff1a;因为本文是分享 Spring Boot 自动配置的原理&#xff0c;所以需要胖友有使用过 Spring Boot 的经验。如果还没使用过的胖友&#xff0c;不用慌&#xff0c;先跳转到《芋道 Spring Boot SpringMVC 入门》文…

云设计模式

随着技术的快速发展&#xff0c;应用的架构逐渐从单体、分层、SOA逐渐向微服务的方向演进&#xff0c;而基础设施也逐渐从大型机&#xff0c;自建机房&#xff0c;到托管在云平台的各种服务上。所有这一切都是为了使应用&#xff08;web/mobile&#xff09;更快、更安全的上线&…

P1447-[NOI2010]能量采集【GCD,数论,容斥】

正题 题目链接&#xff1a;https://www.luogu.org/problemnew/show/P1447 题目大意 求∑i1n∑j1mgcd(i,j)∗2−1\sum_{i1}^n\sum_{j1}^mgcd(i,j)*2-1i1∑n​j1∑m​gcd(i,j)∗2−1 解题思路 设fif_ifi​表示gcd(x,y)i(x∈[1..n],y∈[1..m])gcd(x,y)i(x\in[1..n],y\in[1..m])…

(C语言)数组去重

现有一组数&#xff0c;a[]{1,1,1,3,3,5,5,5,5,6,6,8,8,9,10,10} 要求将他们变为&#xff1a;{1&#xff0c;3&#xff0c;5&#xff0c;6&#xff0c;8&#xff0c;9&#xff0c;10} #include<stdio.h> int fun(int a[],int n){&#xff0c;int i,j1,ka[0],m,flag0;for…

Orchard Core Framework:ASP.NET Core 模块化,多租户框架

上一篇编写Orchard Core一分钟搭建ASP.NET Core CMS &#xff0c;介绍ASP.NET Core CMS &#xff0c;Orchard的ASP.NET Core版&#xff0c;同时对应有一个ASP.NET Core框架。支持模块化和多租户。整个Orchard Core就是通过一个个模块Module组成的首先创建一个空的 ASP.NET Core…

Zookeeper超详细的面试题

转载自 Zookeeper超详细的面试题 1.ZooKeeper是什么&#xff1f; ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;它是集群的管理者&#xff0c;监视着集群中各个节点的状态根据节点提交的反馈…

创建单链表并遍历

以下函数createlink的功能是创建带头结点的单链表&#xff0c;并输入n个整数&#xff0c;依次为各节点的数据域赋值。 #include<stdio.h> #include<stdlib.h>typedef struct Node{int data;struct Node* next; }A;A *createlink(int n) {A *hNULL,*p,*s;int i,x;p…

【什么是泛型,有什么好处】

✅什么是泛型&#xff0c;有什么好处 ✅典型回答✅泛型是如何实现的✅什么是类型擦除&#xff1f;&#x1f4dd;C语言对泛型的支持&#x1f4dd;泛型擦除的缺点有哪些&#xff1f; ✅对泛型通配符的理解&#x1f4dd;泛型中上下界限定符 extends 和 super 有什么区别&#xff1…

P4047-[JSOI2010]部落划分【最小生成树】

正题 题目链接:https://www.luogu.org/problemnew/show/P4047 题目大意 将nnn个点分成kkk个部分&#xff0c;使得最近的两个部分的距离尽可能远。 解题思路 最小生成树连接到只剩下kkk个部分时停止就好了。 codecodecode #include<cstdio> #include<cmath> #in…

.NET Core容器化@Docker

温馨提示&#xff1a;本文适合动手演练&#xff0c;效果更佳。1. 引言我们知道. NET Core最大的特性之一就是跨平台&#xff0c;而对于跨平台&#xff0c;似乎大家印象中就是可以在非Windows系统上部署运行。而至于如何操作&#xff0c;可能就有所欠缺。那这一节我们就结合简单…

Netty面试题(2020最新版)

转载自 Netty面试题&#xff08;2020最新版&#xff09; 1.Netty 是什么&#xff1f; Netty是 一个异步事件驱动的网络应用程序框架&#xff0c;用于快速开发可维护的高性能协议服务器和客户端。Netty是基于nio的&#xff0c;它封装了jdk的nio&#xff0c;让我们使用起来更加…

安卓布局学习:

安卓布局学习&#xff1a; 线性布局LinearLayout 1、orientation方向属性&#xff0c;两种布局 属性值意义horizontal水平布局vertical垂直布局 2、gravity属性 属性值意义rightbottomright居右 相对布局和线性布局的区别 最主要的区别是&#xff0c;相对布局可以单独指定…