各种细节实现

注意 树状数组 的下标不能为 0

注意 代码条理清晰

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
const int maxn=1e5+10;
const int mo=1000000007;
const int sqrn=31623;
#define LL long long
using namespace std;
int n,m;
//shai
int prime[sqrn],cnt_prime;
bool isprime[sqrn];
void shai()
{for(int i=2;i<=sqrn;i++){if(!isprime[i]) prime[++cnt_prime]=i;for(int j=1;j<=cnt_prime&&prime[j]*i<=sqrn;j++){isprime[prime[j]*i]=true;if(i%prime[j]==0)break;}}
}
//num
int num1[maxn*20],num2[maxn*20],c[maxn*20],cnt_num;
int s[maxn],t[maxn];
void chai(int x)
{for(int i=1;i<=cnt_prime;i++)if(x%prime[i]==0){int tmp=prime[i];while(x%prime[i]==0) num1[++cnt_num]=tmp,num2[cnt_num]=prime[i],tmp=tmp*prime[i],x/=prime[i];}if(x!=1) num1[++cnt_num]=x,num2[cnt_num]=x;
}
//st
int st[maxn*20],st_loc[maxn*20],st_mo=maxn*20-1;
int st_q(int x)
{int y=x%st_mo;while(st[y]!=0&&st[y]!=x) y++,y%=st_mo;return y;
}
//Q
int ans[maxn];
struct H {int l,r,id;}qq[maxn];
int tree[maxn*20];
bool cmp(H a,H b){return a.r<b.r;}
int lowbit(int x)
{return -x&x;
}
void add(int x,int y)
{x++;while(x<=cnt_num){tree[x]=(LL)tree[x]*y%mo;x+=lowbit(x);}
}
int q(int x)
{x++;int ans=1;while(x>0){ans=(LL)ans*tree[x]%mo;x-=lowbit(x);}return ans;
}
//ni
int sum[maxn*20];
int f(int x,int y)
{if(y==0) return 1;int t=f(x,y/2);t=(LL)t*t%mo;if(y&1) t=(LL)t*x%mo;return t;
}
//main
int main()
{shai();scanf("%d %d",&n,&m);for(int i=1;i<=n;i++) {int x;scanf("%d",&x);s[i]=cnt_num+1;chai(x);t[i]=cnt_num;}for(int i=1;i<=cnt_num;i++) {int x=st_q(num1[i]);c[i]=st_loc[x];st[x]=num1[i];st_loc[x]=i;}for(int i=1;i<=m;i++) scanf("%d %d",&qq[i].l,&qq[i].r),qq[i].id=i;sort(qq+1,qq+m+1,cmp);int now=0;for(int i=1;i<=cnt_num;i++) tree[i]=1;sum[0]=1;for(int i=1;i<=cnt_num;i++) sum[i]=(LL)sum[i-1]*num2[i]%mo;for(int i=1;i<=cnt_num;i++) sum[i]=f(sum[i],mo-2);for(int i=1;i<=m;i++){int r=qq[i].r,l=qq[i].l,id=qq[i].id;while(now<r) for(int i=s[++now];i<=t[now];i++) add(c[i],num2[i]);ans[id]=(LL)q(t[l-1])*sum[t[l-1]]%mo;}for(int i=1;i<=m;i++) printf("%d\n",ans[i]);return 0;
}

A1339. JZPLCM(顾昱洲)|树状数组|hash表|逆元|分解质因数相关推荐

  1. ACM模板——线段树树状数组ST表

    int bit[maxn],n; void init() {n = maxn;memset(bit,0,sizeof(bit)); } int sum(int i) {int s = 0;while( ...

  2. CF869 E. The Untended Antiquity 二位树状数组+hash

    题意 一个地图,然后三种操作  1.一个矩阵四周加上障碍  2.一个矩阵四周的障碍消除  3.问你两个点之间是否纯在一条路径不经过障碍 题解 我们可以给每一个矩阵一个hash值  然后将矩阵里面的点都 ...

  3. codeforces869EThe Untended Antiquity(二维树状数组)

    /* 二维树状数组+Hash 题意: 给一个地图(n,m) 三种操作: 1,在以(r1,c1).(r2,c2)为对角的矩形四条边上添加障碍 2,消除以(r1,c1).(r2,c2)为对角的矩形四条边上 ...

  4. 树状数组(求逆序对)

    一.树状数组是什么 树状数组,又称二进制索引树,英文名Binary Indexed Tree 之前遇到一个求逆序对的题,看了很多题解都只说了这个树状数组,关于怎么实现的全都避而不谈,我研究了一下午,总 ...

  5. 差分+树状数组 线段树【P2357】 守墓人

    题目描述-->p2357 守墓人 敲了一遍线段树,水过. 树状数组分析 主要思路: 差分 简单介绍一下差分(详细概念太麻烦,看下面. 给定一个数组 7 8 6 5 1 8 18 20 35 // ...

  6. 洛谷 P5057 [CQOI2006]简单题(树状数组)

    嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...

  7. Color the ball(HDU1556)树状数组

    每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...

  8. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

  9. Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)

    题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...

  10. poj_3067 树状数组

    题目大意 左右两个竖排,左边竖排有N个点,从上到下依次标记为1,2,...N; 右边竖排有M个点,从上到下依次标记为1,2....M.现在从K条直线分别连接左边一个点和右边一个点,求这K条直线的交点个 ...

最新文章

  1. js 自带的三种弹框
  2. 果蝇大脑研究能够改进计算机相似性搜索算法
  3. Win7 64位系统 注册 ocx控件
  4. 黄仁勋把自己做成了虚拟娃娃
  5. oracle locked time,Oracle里面的用户smsdb无法登录 LOCKED(TIMED)
  6. 【学习笔记】利用Excel实现简易版大屏
  7. pandas,apply并行计算的一个demo
  8. OpenHub框架–下一个有趣的功能
  9. VMWare笔记-解决虚拟机能ping通主机能上网,但主机ping不通虚拟机(含思路)
  10. pytorch使用GPU训练模型
  11. mysql二级缓存redis_redis实现二级缓存
  12. python查找并修改文件中的内容_如何使用Python搜索和替换文件中的文本?
  13. ram_flash驱动
  14. Eclipse 快捷键的使用
  15. 逻辑运算 神经网络_使用神经网络实现逻辑门(第2部分)
  16. 【笔记】Python算法教程(1)
  17. linux nginx环境下,网站不显示字体和图形.(图形变成了方框),解决nginx下加载eot|otf|ttf|woff|svg等404 错误问题
  18. java 解析yml文件
  19. javaweb调用qq认证登录接口
  20. 优雅地乱玩Linux-1-系统

热门文章

  1. win10c盘扩容_如何给磁盘进行扩容/拆分/合并的操作?保姆级教学
  2. 幼儿园带括号算式口诀_巧记数学公式,背熟这41组数学顺口溜就对了!
  3. 正态分布之中心极限定理
  4. QQ音乐爬虫程序详细解析(一)——歌曲下载模块
  5. 实习日记一:jdk的安装和环境变量配置,IDEA和mysql的安装
  6. 方法重写和重载的规则
  7. excel中如何解锁锁定单元格
  8. 简易看房加权评估案例C++
  9. excel选中指定行数
  10. 042_Unicode对照表八