[Lydsy1805月赛]口算训练 BZOJ5358
分析:
没想到这道题还能二分查找...
这题主席树的话,裸的很显然...我们将每一个数分解质因数,之后建一个可持久化权值线段树维护[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的更多相关文章
- [Bzoj5358][Lydsy1805月赛]口算训练(预处理+动态开点线段树)
5358: [Lydsy1805月赛]口算训练 Time Limit: 5 Sec Memory Limit: 512 MBSubmit: 318 Solved: 105[Submit][Stat ...
- [BZOJ5358]/[HDU6287]口算训练
[BZOJ5358]/[HDU6287]口算训练 题目大意: 给定一个长度为\(n(n\le10^5)\)的正整数序列\(a_{1\sim n}\),\(m(m\le10^5)\)次询问.每次询问给出 ...
- C# WinForm动态控件实例:口算训练
昨天晚上回寝室看到室友正在被一个C#课的作业苦恼,作业的内容是编写一个口算训练程序,能够实现随意添加题目数量.于是,喜欢写C#的我就决定解救一下他们. 创建动态控件 既然要动态添加,那就必须使用动态控 ...
- hdu 6287 口算训练
题意: 小Q非常喜欢数学,但是他的口算能力非常弱.因此他找到了小T,给了小T一个长度为nn的正整数序列a1,a2,...,ana1,a2,...,an,要求小T抛出mm个问题以训练他的口算能力. 每个 ...
- HDU - 6287 口算训练 二分+质因数分解
小Q非常喜欢数学,但是他的口算能力非常弱.因此他找到了小T,给了小T一个长度为nn的正整数序列a1,a2,...,ana1,a2,...,an,要求小T抛出mm个问题以训练他的口算能力.每个问题给出三 ...
- 2018 CCPC 女生赛 hdoj6287 口算训练
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6287 Summarize: 1.分解质因数: 2.二分查找函数lower_bound与upper_bo ...
- WPF简单的口算案例
前几天在博客园,看到有博友利用Winform做了一个口算案例,于是我想把它移植在WPF程序中.Winform程序:http://www.cnblogs.com/ImYZF/p/3345452.html ...
- BZOJ_5359_[Lydsy1805月赛]寻宝游戏_DP
BZOJ5359_[Lydsy1805月赛]寻宝游戏_DP Description begin.lydsy.com/JudgeOnline/upload/201805.pdf 我们需要找到一条权值最大 ...
- 用Python开发小学二年级口算自动出题程序
版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com 武汉光谷一小二年级要求家长每天要给小孩出口算题目,让孩子练习. 根据老师出题要求编写了Python程序 ...
随机推荐
- JDK8下maven使用maven-javadoc-plugin插件报错
由于JDK8的doc生成机制比之前的要严谨许多,导致项目用maven打包的时候出错 解决办法: 添加-Xdoclint:none配置 完整配置如下: <plugin> <grou ...
- 用sparkR, 分析上亿条订单数据的脚本。
上周我们这个10人的小团队开发的推荐拉新系统, 日拉新人数已接近4万人.过去几个月这个系统从无到有, 拉新从日增几千稳步增长到日增几万, 同事们几个月来,每天工作13个小时以上,洗澡时间都没有, 有时 ...
- ionic插件安装与卸载
使用下面的命令查询.安装.卸载插件: $ ionic plugin list //列出所有已安装插件 $ ionic plugin remove 插件名 //先根据上面的list列出插件,然后根据插件 ...
- SQLSERVER中的元数据锁
SQLSERVER中的元数据锁 网上对于元数据锁的资料真的非常少 元数据锁一般会出现在DDL语句里 下面列出数据库引擎可以锁定的资源 资源 说明 RID 用于锁定堆(heap)中的某一行 KEY 用于 ...
- 3.5星|《订阅》:Youtube对用户喜好的发现与应对
订阅:数字时代的商业变现路径 主要内容我总结是Youtube对用户喜好的发现与应对.可以认为很多时候作者说的是Youtubu官方的态度与想法.穿插了许多Youtube上的成功创作者的故事. Youtu ...
- IDEA中的替换功能(替换代码中的变量名很好用哦)
刚刚上班不久,这两天正在研究公司项目里面的代码,今天用阿里的插件扫描了一下代码,发现代码中有很多变量的命名,没有遵循驼峰式的命名规则.一开始我一个一个的修改这些变量名,后来无意中用了一下Ctrl+F( ...
- Asp.net中DataTable的排序功能
DataTable里的数据,如果是从数据库中取得的数据,我们可以用order by排序,而从excel表格取得的数据,就需要自己进行操作了. 例如,Dt_Data2是读取Excel表格取到的数据 Da ...
- 阿里八八Alpha阶段Scrum(1/12)
任务分配 叶文滔:整体框架UI设计.作为组长进行任务协调 俞鋆:后端服务器及数据库搭建 王国超:日程模块多日显示部分设计 黄梅玲:日程模块单日显示部分设计 林炜鸿:日程模块文本添加部分设计 张岳.刘晓 ...
- C++构造析构函数生命期及对象生命期
- SDOI 2018 R2 游记
一篇真正的“游记”. DAY -3 下午: 今天老师批准了我去省选划水的请假要求. 批准之后感觉学习非常有动力,顺便忽悠别的同学和我一起去,然而wzx是唯一一个表示可以考虑一下的同学,其他同学直接一口 ...