CF1114F-Please, another Queries on Array?【线段树,欧拉函数】

正题

题目链接:https://www.luogu.com.cn/problem/CF1114F


题目大意

nnn个数的一个序列要求支持

  1. 区间乘上一个数
  2. 询问一个区间的乘积的φ\varphiφ

解题思路

因为数很小,而我们求φ\varphiφ需要知道一个数所包含的质因子。发现在300300300以内的只有626262个质数,那么我们可以状态压缩起来一个数SSS表示状压后的所拥有的质数集合。

用线段树维护区间乘机和质数集合即可,时间复杂度O(nk+qlog⁡n)O(nk+q\log n)O(nk+qlogn)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll pri[62]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293};
const ll N=4e5+10,XJQ=1e9+7;
ll n,q,a[N],ans1,ans2;
ll w[N*4],v[N*4],lazyw[N*4],lazyv[N*4];
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;
}
ll check(ll x){ll ans=0;for(ll i=0;i<62;i++)if(x%pri[i]==0)ans|=(1ll<<i);return ans;
}
void Build(ll x,ll L,ll R){lazyw[x]=1;if(L==R){w[x]=a[L];v[x]=check(a[L]);return;}ll mid=(L+R)>>1;Build(x*2,L,mid);Build(x*2+1,mid+1,R);w[x]=w[x*2]*w[x*2+1]%XJQ;v[x]=v[x*2]|v[x*2+1];return;
}
void Downdata(ll x,ll l,ll mid,ll r){if(!lazyv[x])return;ll val=lazyw[x];w[x*2]=w[x*2]*power(val,mid-l+1)%XJQ;w[x*2+1]=w[x*2+1]*power(val,r-mid)%XJQ;lazyw[x*2]=lazyw[x*2]*val%XJQ;lazyw[x*2+1]=lazyw[x*2+1]*val%XJQ;v[x*2]|=lazyv[x];v[x*2+1]|=lazyv[x];lazyv[x*2]|=lazyv[x];lazyv[x*2+1]|=lazyv[x];lazyw[x]=1;lazyv[x]=0;return;
}
void Change(ll x,ll L,ll R,ll l,ll r,ll val){if(L==l&&R==r){ll k=check(val);v[x]|=k;w[x]=w[x]*power(val,R-L+1)%XJQ;lazyw[x]=lazyw[x]*val%XJQ;lazyv[x]|=k;return;}ll mid=(L+R)>>1;Downdata(x,L,mid,R);if(r<=mid)Change(x*2,L,mid,l,r,val);else if(l>mid)Change(x*2+1,mid+1,R,l,r,val);else Change(x*2,L,mid,l,mid,val),Change(x*2+1,mid+1,R,mid+1,r,val);w[x]=w[x*2]*w[x*2+1]%XJQ;v[x]=v[x*2]|v[x*2+1];return; 
}
void Ask(ll x,ll L,ll R,ll l,ll r){if(L==l&&R==r){ans1=ans1*w[x]%XJQ;ans2=ans2|v[x];return;}ll mid=(L+R)>>1;Downdata(x,L,mid,R);if(r<=mid)Ask(x*2,L,mid,l,r);else if(l>mid)Ask(x*2+1,mid+1,R,l,r);else Ask(x*2,L,mid,l,mid),Ask(x*2+1,mid+1,R,mid+1,r);return; 
}
int main()
{scanf("%lld%lld",&n,&q);for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);Build(1,1,n);while(q--){char op[10];ll l,r,x;scanf("%s%lld%lld",op,&l,&r);if(op[0]=='M'){scanf("%lld",&x);Change(1,1,n,l,r,x);}else{ans1=1;ans2=0;Ask(1,1,n,l,r);for(ll i=0;i<62;i++)if((ans2>>i)&1)ans1=ans1*(pri[i]-1)%XJQ*power(pri[i],XJQ-2)%XJQ;printf("%lld\n",ans1);}}
}

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

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

相关文章

牛客练习赛20

A. 礼物 枚举一元奥利奥的个数&#xff0c;计算2元的个数&#xff0c;现在需要解决从N种物品中&#xff0c;取x个的方法数&#xff0c;把N个种类看作N个盒子&#xff0c;奥利奥看作球&#xff0c;就是经典球盒模型了。 #include <bits/stdc.h> #define rep(i,a,b) for(in…

【模拟】数列

数列 题目大意&#xff1a; 有一个序列&#xff0c;1,11,21,1211,111221,3122111,11,21,1211,111221,3122111,11,21,1211,111221,312211&#xff0c;形如上一个数有x1x_1x1​个x2x_2x2​&#xff0c;x3x_3x3​个x4x_4x4​&#xff0c;把x连起来即为当前数 原题&#xff1a; …

.net core redis 驱动推荐,为什么不使用 StackExchange.Redis

前言本人从事 .netcore 转型已两年有余&#xff0c;对 .net core 颇有好感&#xff0c;这一切得益于优秀的语法、框架设计。2006年开始使用 .net 2.0&#xff0c;从 asp.net 到 winform 到 winservice 等等领域开发都些许涉猎。对.net和大多数同胞有着类似的感触&#xff0c;那…

2018 计蒜之道 复赛

A. 贝壳找房函数最值 常规贪心推式子。按(a-1)/b排序 #include <bits/stdc.h> #define rep(i,a,b) for(int ia;i<b;i) #define frep(i,a,b) for(int ia;i>b;--i) #define mem(W) memset(W,0,sizeof(W)) #define pb push_back typedef long long ll; const int N 1…

看电影

看电影 题目大意&#xff1a; 在一个有n个点的环中选m个人&#xff0c;选中ld号的可能性为多少 原题&#xff1a; 题目描述 听说NOIP2016大家都考得不错&#xff0c;于是CCF奖励省常中了 K 张变形金刚5的电影票奖励OI队的同学去看电影。可是省常中OI队的同学们共有 N&…

[开源]开放域实体抽取泛用工具 NetCore2.1

开放域实体抽取泛用工具https://github.com/magicdict/FDDC更新时间 2018年7月16日 By 带着兔子去旅行开发这个工具的起源是天池大数据竞赛&#xff0c;FDDC2018金融算法挑战赛02&#xff0d;A股上市公司公告信息抽取。这个比赛是针对金融公告开展的信息抽取比赛。在参赛过程中…

牛客-牛牛的猜球游戏

正题 题目链接:https://ac.nowcoder.com/acm/contest/7605/B 题目大意 101010个数&#xff0c;nnn个操作交换两个位置的数。mmm次询问操作一段区间后的序列。 解题思路 处理出fi,jf_{i,j}fi,j​表示处理了前iii个第jjj位的是哪个数。然后拿fl−1f_{l-1}fl−1​和frf_rfr​一一…

【DP】树塔狂想曲

树塔狂想曲 题目大意&#xff1a; 有一个数字金字塔&#xff0c;让你求出去掉一个点后&#xff0c;从最顶端走到最低端的最大值&#xff08;只能往下或右下走&#xff09; 原题: 题目描述 相信大家都在长训班学过树塔问题&#xff0c;题目很简单求最大化一个三角形数塔从上…

CF438D-The Child and Sequence【线段树】

正题 题目链接:https://www.luogu.com.cn/problem/CF438D 题目大意 一个序列要求支持 区间求和区间取模单点修改 解题思路 对于一个数取模会有结果x%p{x≤⌊x2⌋xx\% p\{\begin{matrix}x\leq \lfloor\frac{x}{2}\rfloor\\x\end{matrix}x%p{x≤⌊2x​⌋x​ 也就是一个数最多…

主席树学习笔记

主席树学习笔记 说在前边&#xff1a; 之前了解过主席树的基础的思想&#xff0c;但是没有系统学习过&#xff0c;所以打算通过一些题目重新学习。POJ2104 题意&#xff1a;静态区间查询 k-th number思路&#xff1a;对每个位置开一颗权值线段树&#xff0c;维护前缀区间每个数…

初一模拟赛总结(2019.5.25)

成绩&#xff1a; 本蒟蒻竟AKAKAK了&#xff0c;不敢相信 &#xff89;)&#xff9f;Д&#xff9f;( rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4111lyflyflyf400400400100100100100100100100100100100100100222hkyhkyhky3203203201001001001001001006…

.NET Core开发日志——HttpClientFactory

当需要向某特定URL地址发送HTTP请求并得到相应响应时&#xff0c;通常会用到HttpClient类。该类包含了众多有用的方法&#xff0c;可以满足绝大多数的需求。但是如果对其使用不当时&#xff0c;可能会出现意想不到的事情。博客园官方团队就遇上过这样的问题&#xff0c;国外博主…

YbtOJ#20067-[NOIP2020模拟赛B组Day5]糖果分配【dp】

正题 题目链接:http://noip.ybtoj.com.cn/contest/102/problem/1 题目大意 nnn个xix_ixi​在[li,ri][l_i,r_i][li​,ri​]中随机选择&#xff0c;给出一个ccc&#xff0c;一个序列∑kic\sum k_ic∑ki​c 每种方案贡献为∏i1nxiki\prod_{i1}^nx_i^{k_i}i1∏n​xiki​​ 解题思路…

Wannafly挑战赛18

Wannafly挑战赛18 A. 序列 先考虑暴力&#xff0c;相邻两个树之间乘上给定的三种数&#xff0c;递推出下一个位置填什么&#xff0c;然后再check一下&#xff0c;最后一位是否为1即可。这样时间显然不行&#xff0c;但是给我们一种思路&#xff0c;就是中间的转换关系&#xff…

【拓扑排序】【DP】旅行计划(luogu 1137)

旅行计划 luogu 1137 题目大意&#xff1a; 有一堆点&#xff0c;之间连接着一些边&#xff08;有向&#xff09;&#xff0c;保证无环&#xff0c;现在要求出从任意地方出发到所有点的最长路&#xff08;出发点不一定相同&#xff09; 原题&#xff1a; 题目描述 小明要…

【asp.net Core MVC + angular6实战】 - 1. 环境搭建

为什么打算写这些文章&#xff1f;没有为什么&#xff0c;只是为了学习Angular和更了解.Net Core等技术需要用到的技术&#xff1f;后端使用.Net Core 2.1 EF Core 2.1 Mysql 5.7 Identity &#xff08;不知道Identity算不算一个独立的技术点&#xff09;前端主要使用的是An…

YbtOJ#20070-[NOIP2020模拟赛B组Day5]诗人小K【状压dp】

正题 题目链接:http://noip.ybtoj.com.cn/contest/102/problem/4 题目大意 求有多少个长度为nnn的序列aaa满足1≤ai≤101\leq a_i\leq 101≤ai​≤10&#xff0c;且可以找到一组(i,j,k,l)(i,j,k,l)(i,j,k,l)使得(∑pij−1apx)&(∑pjk−1apy)&(∑pklapz)(\sum_{pi}^{j…

Codeforces Round #491 (Div. 2)

Codeforces Round #491 (Div. 2) A. If at first you dont succeed... 按题意判断 #include <bits/stdc.h> #define rep(i,a,b) for(int ia;i<b;i) #define pb push_back #define mem(W) memset(W,0,sizeof(W)) typedef long long ll; inline int read() {char cgetch…

学习分享会(2019.5.31)

学习分享会 First&#xff08;初三大佬发言&#xff09; 初三大佬在为初二大佬讲一堆哲学的道理&#xff0c;虽然十分高深&#xff0c;但还是听懂了一点点 Second&#xff08;初二大佬发言&#xff09; 初二大佬开始“秀”&#xff0c;首先是大佬LW讲了讲十分常识的东西&am…

微软宣布公开预览Dev Spaces for AKS

微软宣布公开预览面向Azure Kubernetes Services&#xff08;AKS&#xff09;的Dev Spaces&#xff0c;为团队提供了一种快速的Kubernetes迭代开发体验。该版本是继5月份Build 2018大会上Dev Spaces内部预览之后的版本。借助这个版本&#xff0c;微软希望为开发人员提供一种在A…