分析:

没想到这道题还能二分查找...

这题主席树的话,裸的很显然...我们将每一个数分解质因数,之后建一个可持久化权值线段树维护[L,R]区间内的每一种质因子的个数,分解质因数的话,可以选择用线筛,总体时间复杂度为O(qlognlogn+nlogn+n);之后的常数巨大,比根号跑的还慢...当然,主席树可以只维护质数,这样能减少一个log,快上不少。

附上代码:

#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <iostream>
using namespace std;
#define N 100005
#define maxn 100000
#define lson l,m,tr[rt].ls
#define rson m+1,r,tr[rt].rs
#define clear(rt) tr[rt].ls=tr[rt].rs=tr[rt].siz=0
struct node
{
int ls,rs,siz;
}tr[N*200];
inline char nc() {
static char buf[100000],*p1,*p2;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int rd() {
int x=0;char s=nc();
while(s<'0'||s>'9') s=nc();
while(s>='0'&&s<='9') x=(x<<3)+(x<<1)+s-'0',s=nc();
return x;
}
int rot[N],pri[N],vis[N],p[N],n,Q,a[N],cnt;
void init()
{
int num=0;
for(int i=2;i<N;i++)
{
if(!vis[i])
{
pri[++num]=i;
p[i]=i;
}
for(int j=1;j<=num&&i*pri[j]<N;j++)
{
vis[i*pri[j]]=1;p[i*pri[j]]=pri[j];
if(i%pri[j]==0)break;
}
}
}
void insert(int x,int v,int c,int l,int r,int &rt)
{
rt=++cnt,clear(cnt);
if(l==r){tr[rt].siz=tr[x].siz+c;return ;}
int m=(l+r)>>1;
if(m>=v)tr[rt].rs=tr[x].rs,insert(tr[x].ls,v,c,lson);
else tr[rt].ls=tr[x].ls,insert(tr[x].rs,v,c,rson);
tr[rt].siz=tr[tr[rt].ls].siz+tr[tr[rt].rs].siz;
}
int query(int x,int v,int l,int r,int rt)
{
//if(l==r)printf("%d %d %d\n",l,r,tr[rt].siz-tr[x].siz);
if(l==r)return tr[rt].siz-tr[x].siz;
int m=(l+r)>>1;
if(m>=v)return query(tr[x].ls,v,lson);
return query(tr[x].rs,v,rson);
}
int main()
{
int T;T=rd();
init();
while(T--)
{
rot[0]=cnt=0;
n=rd();Q=rd();
for(int i=1;i<=n;i++)
{
a[i]=rd();rot[i]=rot[i-1];
int t=a[i];
while(t!=1)insert(rot[i],p[t],1,1,maxn,rot[i]),t=t/p[t];
}
while(Q--)
{
int x,y,z;
x=rd();y=rd();z=rd();
int t=z,u=0;
while(t!=1)
{
//printf("%d\n",p[t]);
if(query(rot[x-1],p[t],1,maxn,rot[y]))
{
insert(rot[y],p[t],-1,1,maxn,rot[y]);
}else
{
u=1;
puts("No");
break;
}
t=t/p[t];
}
while(z!=t)
{
insert(rot[y],p[z],1,1,maxn,rot[y]);
z=z/p[z];
}
if(!u)puts("Yes");
}
}
return 0;
}

  

[Lydsy1805月赛]口算训练 BZOJ5358的更多相关文章

  1. [Bzoj5358][Lydsy1805月赛]口算训练(预处理+动态开点线段树)

    5358: [Lydsy1805月赛]口算训练 Time Limit: 5 Sec  Memory Limit: 512 MBSubmit: 318  Solved: 105[Submit][Stat ...

  2. [BZOJ5358]/[HDU6287]口算训练

    [BZOJ5358]/[HDU6287]口算训练 题目大意: 给定一个长度为\(n(n\le10^5)\)的正整数序列\(a_{1\sim n}\),\(m(m\le10^5)\)次询问.每次询问给出 ...

  3. C# WinForm动态控件实例:口算训练

    昨天晚上回寝室看到室友正在被一个C#课的作业苦恼,作业的内容是编写一个口算训练程序,能够实现随意添加题目数量.于是,喜欢写C#的我就决定解救一下他们. 创建动态控件 既然要动态添加,那就必须使用动态控 ...

  4. hdu 6287 口算训练

    题意: 小Q非常喜欢数学,但是他的口算能力非常弱.因此他找到了小T,给了小T一个长度为nn的正整数序列a1,a2,...,ana1,a2,...,an,要求小T抛出mm个问题以训练他的口算能力. 每个 ...

  5. HDU - 6287 口算训练 二分+质因数分解

    小Q非常喜欢数学,但是他的口算能力非常弱.因此他找到了小T,给了小T一个长度为nn的正整数序列a1,a2,...,ana1,a2,...,an,要求小T抛出mm个问题以训练他的口算能力.每个问题给出三 ...

  6. 2018 CCPC 女生赛 hdoj6287 口算训练

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6287 Summarize: 1.分解质因数: 2.二分查找函数lower_bound与upper_bo ...

  7. WPF简单的口算案例

    前几天在博客园,看到有博友利用Winform做了一个口算案例,于是我想把它移植在WPF程序中.Winform程序:http://www.cnblogs.com/ImYZF/p/3345452.html ...

  8. BZOJ_5359_[Lydsy1805月赛]寻宝游戏_DP

    BZOJ5359_[Lydsy1805月赛]寻宝游戏_DP Description begin.lydsy.com/JudgeOnline/upload/201805.pdf 我们需要找到一条权值最大 ...

  9. 用Python开发小学二年级口算自动出题程序

    版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com 武汉光谷一小二年级要求家长每天要给小孩出口算题目,让孩子练习. 根据老师出题要求编写了Python程序 ...

随机推荐

  1. 【读书笔记】iOS-发布你的促销消息-推动通知

    推送通知可以在应用没有启动或者在后台运行的时候给用户一些提示.因此,很多应用开发者和公司用它来推销自己的产品.通过这个渠道推送自己的产品是不错的选择,但是一定要遵守起码的道德规范(不要在用户睡觉的时候 ...

  2. 高性能JavaScript(DOM编程)

    首先什么是DOM?为什么慢? DOM:文档对象模型,是一个独立于语言的,用于操作XML和HTML文档的程序接口(API) 用脚本进行DOM操作的代价很昂贵.那么,怎样才能提高程序的效率? 1.DOM访 ...

  3. jQuery同步Ajax带来的UI线程阻塞问题

    一.需求 在调ajax接口的时候因为有时间延迟,想要做一个loading加载的效果,等数据返回时再把loading的效果去掉. 所以我在调ajax的代码块前面加了显示loading效果的代码,ajax ...

  4. web api 权限控制

    https://www.cnblogs.com/landeanfen/p/5287064.html 我只是个搬运工, 我只想存个档

  5. 在Android Native层中创建Java虚拟机实例

    前言 Android应用中JNI代码,是作为本地方法运行的.而大部分情况下,这些JNI方法均需要传递Dalvik虚拟机实例作为第一个参数.例如,你需要用虚拟机实例来创建jstring和其他的Java对 ...

  6. ionic 上拉菜单(ActionSheet)安装和iOS样式不一样

    ISO中的界面是这样的: 然而,Android中的界面是这样的: 代码如下: HTML部分: <body ng-app="starter" ng-controller=&qu ...

  7. JSP源码、改写Servlet为JSP、查看转译成为Servlet的文件、JSP字符编码设置

    概述 在Servlet中编写HTML太麻烦了,应该使用JSP.JSP中可以直接编写HTML,使用指示.声明.脚本(scriptlet)等元素来堆砌各种功能,但JSP最后还是会被容器转译为Servlet ...

  8. springboot 学习之路 17(webflux 入门 (1))

    Webflux: webflux是在springboot2系列引入的技术:补充一些概念: 1> Reactive Streams 是 JVM 中面向流的库标准和规范: 处理可能无限数量的元素 按 ...

  9. java中Proxy(代理与动态代理)

    转自: https://blog.csdn.net/pangqiandou/article/details/52964066 一.代理的概念 动态代理技术是整个java技术中最重要的一个技术,它是学习 ...

  10. 软件工程-XP方法十二个最佳实践