题解:判断d是否整除,可以转化为求这段区间内d的因子的指数是否均大于d中的指数。容易想到把每个数字都分解为素因子形式,对每个素数出现的次数求个前缀和即可。然而,这样时间空间都不行。注意到对于一个数x,小于sqrt(x)的素因子最多sqrt(x)个,而每个数包含大于sqrt(x)的素因子最多一个。那么容易想到,对于小于sqrt(x)的素因子预处理指数项前缀和。大于sqrt(n)的数,提前分离出来,只需实现区间查询一个数是否出现即可。这个操作,直接分块预处理一下就好了。复杂度o(n×sqrt(n))(大概一辈子都是签到选手了吧。

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <set>
#define mem(MW) memset(MW,0,sizeof(MW))
#define rep(i,a,b) for(int i=a;i<=b;++i)
typedef long long ll;
const int N = 1e5 + 100;
const int lim = 320;
inline int read() {char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}
using namespace std;
int n, m, a[N];
int p[N], notp[N], nxt[N];
void init() {notp[1]=1;nxt[1]=1;rep(i,2,1e5) {if(!notp[i])p[++p[0]]=i,nxt[i]=i;rep(j,1,p[0]) {if(p[j]*i>1e5)break;notp[p[j]*i]=1;nxt[p[j]*i]=p[j];if(i%p[j]==0)break;}}
}
int b[lim+3][N], v[N], cnt, c[N], sum[N], sumc[N];
void cal_pr(int x) {cnt=0;while(x!=1) {int t=nxt[x];v[++cnt]=t; sum[t]=0;while(x%t==0)x/=t,++sum[t];}
}
int belong[N], l[lim+3], r[lim+3], B, num, S[lim+3][N];
void build() {mem(sumc), mem(b), mem(S);B=sqrt(n);num=n/B;if(n%B)++num;rep(i,1,n)belong[i]=(i-1)/B+1;rep(i,1,num)l[i]=(i-1)*B+1,r[i]=i*B;r[num]=n;rep(i,1,n) {cal_pr(a[i]);rep(j,1,cnt) {if(v[j]<lim) b[v[j]][i]+=sum[v[j]];else S[belong[i]][v[j]]+=sum[v[j]];}c[i]=v[cnt];sumc[i]=sum[v[cnt]];}rep(j,1,lim)rep(i,2,n) b[j][i]+=b[j][i-1];
}
int fd(int L, int R, int x) {int tmp=0;if(R-L+1<=B) {rep(i,L,R) if(c[i]==x) tmp+=sumc[i];return tmp>=sum[x];}rep(i,L,r[belong[L]]) if(c[i]==x) tmp+=sumc[i];rep(i,belong[L]+1,belong[R]-1) tmp+=S[i][x];rep(i,l[belong[R]],R) if(c[i]==x) tmp+=sumc[i];return tmp>=sum[x];
}
int ck(int l, int r, int d) {int tmp=-1;cal_pr(d);rep(i,1,cnt) {if(v[i]<lim&&b[v[i]][r]-b[v[i]][l-1]<sum[v[i]]) return 0;if(v[i]>=lim) tmp=v[i];}if(tmp==-1) return 1;return fd(l,r,tmp);
}
int main() {int T;init();T=read();while(T--) {n=read(), m=read();rep(i,1,n) a[i]=read();build();rep(i,1,m) {int l,r,d;l=read(), r=read(), d=read();if(ck(l,r,d)) puts("Yes");else puts("No");}}return 0;
}

转载于:https://www.cnblogs.com/RRRR-wys/p/9099627.html

BZOJ5358: [Lydsy1805月赛]口算训练相关推荐

  1. python口算训练出题

    python口算训练出题 为了给妹妹出算数题,编了一个乘除法的出题代码,省去了许多时间 图片 obj=open(r"C:\Users\12483\Desktop\math.txt" ...

  2. HDU6287 口算训练(唯一分解定理+二分)

    口算训练 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) Total Sub ...

  3. hdu 6287 口算训练(二分+质因数分解+思维)

    口算训练 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) Total Sub ...

  4. 口算训练java_提高孩子口算能力的5大方法,超实用!(附练习,可打印)

    原标题:提高孩子口算能力的5大方法,超实用!(附练习,可打印) 来源: 网络 编辑:成长园(id:czy6688990) 小编提醒 关注成长园,后台回复"1201" 即可获取打印版 ...

  5. pyhton的tkinter制作简易口算训练器

    前言 最近参加实习投递,发现好多家企业不管是什么岗位(研发or职能)都会考验到大家的数学能力 例如宝洁笔试直接就上了口算题,限时是真的紧张. 楼主不仅编程能力垃圾,数学能力也从小没有得到很好的锻炼(键 ...

  6. 用java编程100道问题//10弟弟的作业,口算训练

    弟弟的作业 题目描述 Rock的弟弟刚做完了"100以内数的加减法"这部分的作业,请你帮他检查一下.每道题目(包括弟弟的答案)的格式为a + b = c或者a – b = c,其中 ...

  7. 口算训练-(2018-女生赛)(二分+唯一分解定理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6287 题意:给你n个数,每个数都很大; 有q次询问,让你判断一下从下标为: [L,R]的范围内 能否通 ...

  8. 2021年中国大学生程序设计竞赛 女生专场 - 热身赛 Problem C. 口算训练(质因子分解)

    题目分析:判断 xxx 是 yyy 的倍数,等价于质因子分解后, yyy 中的每个质因子的出现次数都小于等于其在 xxx 中的出现次数. 那么对于每次询问 [l,r,d][l,r,d][l,r,d], ...

  9. HDU - 6287 口算训练 (质因子分解 + 二分)

    题意:给一个序列,问 [l, r] 连续区间的乘积能否被 d 整除 思路:用 vector 记录每个质因子在序列中出现的位置,upper_bound(vec[p].begin(), vec[p].en ...

最新文章

  1. 清华大学开源迁移学习算法库:基于PyTorch实现,支持轻松调用已有算法
  2. 无盘服务器pnp,深入解读无盘PNP方法,无盘系统PNP并不神秘
  3. Nginx配置pathinfo
  4. linux 没有权限登录,CentOS中让一个用户没有登录权限
  5. win7系统0x0000001a蓝屏代码怎么办
  6. jsp java循环读取json_JAVA JSON遍历问题,求解(内附代码)
  7. 常用的排序算法总结(一)
  8. jquery开发的”天才笨笨碰“游戏
  9. HDOJ-1999 不可摸数
  10. Windows10中安装VMware Workstation Pro 15.x与使用Ubuntu 20.04 LTS
  11. 【计算机网络实验】使用Packet Tracer搭建网络拓扑
  12. Linux Command grep
  13. 一文了解plc编程、电脑编程、手机APP编程、组态编程、云编程(上)
  14. phpstudy中的站点突然无法打开,明明路径打对也无法打开,解决办法
  15. 使用NGUI实现拖拽功能(拼图小游戏)
  16. sphinx使用笔记
  17. 面向对象系列(二)-封装,继承,多态
  18. 江民科技董事长王江民因病在北京逝世 享年59岁
  19. 一文搞定计算机网络面试题
  20. i春秋第二届春秋欢乐赛登山者writeup

热门文章

  1. 热力地图高德_高德地图:最新动态
  2. python加油视频教程_TensorFlow 视频教程
  3. php获取域名方法,PHP实现获取域名的方法小结
  4. java实用教程——组件及事件处理——ActionEvent事件
  5. 7-3 棋盘覆盖 (10 分)(思路加详解)Come baby
  6. 《C++ Primer》7.2.1节练习
  7. [蓝桥杯][算法提高VIP]分分钟的碎碎念-dfs
  8. 算法---字符串顺序平移
  9. word List39
  10. 520 钻石争霸赛 7-5 大勾股定理 (数学)