[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程序 ...
随机推荐
- hibernate动态表名映射
引自:http://blog.csdn.net/xvshu/article/details/39187779 最近的一个项目有一个需求,有N个考核单位,要对每个考核单位生成一张考核情况表,这样做的目的 ...
- Monkey Android app稳定性测试工具之Monkey使用教程
Monkey Android app稳定性测试工具之Monkey使用教程 by:授客 QQ:1033553122 由于篇幅问题,仅提供百度网盘下载链接: Android app稳定性测试工具之Monk ...
- singleInstance和singleTask导致startActivityForResult回调失败
先来了解下这两种启动模式: 1.singleInstance,全局唯一,它的实例在全局(即在众多任务栈中)是唯一的,它单独地存在于属于自己的任务栈中,而且这个任务栈没有其他实例. 2.singleTa ...
- StretchBlt和StretchDIBits
StretchBlt:从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩,如果目标设备是窗口DC,则意味着在窗口绘制位图,大致的使用代码如下: void DrawImag ...
- Oracle EBS OPM convert dtl reservation
--convert_dtl_reservation --created by jenrry DECLARE l_reservation_rec mtl_reservations%ROWTYPE; l_ ...
- pvr.ccz 与 png 格式 互转的解决方案
pvr.ccz与png互转 pvr是苹果的一种图片格式,我们需要转成png,最简单的办法就是用TexturePacker. 准备工作 TexturePacker :http://www.codeand ...
- linux常见问题解决
1.登录环境故障的原理及解决办法? -bash-4.1$ -bash-4.1$ cp /etc/skel/.bash* .
- 题解 P1120 【小木棍 [数据加强版]】
题面 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度. 给出每段小木棍的长度,编程帮 ...
- webpack分离css单独打包
这篇文章过期了,webpack4.x已经不这么用了,最新的可以看这个地址webpack实战场景系列 原文地址:http://www.izhongxia.com/posts/44724.html CHA ...
- ubuntu环境下docker的安装与操作
只要按照本文的步骤一步步的走,就能正确的安装docker并使用,ubuntu需要联网 1. 在Ubuntu中安装Docker 更新ubuntu的apt源索引 sudo apt-get update 安 ...