bzoj5358
Problem A. 口算训练
Input file: stdin
Output file: stdout
Time limit: 5 seconds
Memory limit: 512 megabytes
小 Q 非常喜欢数学,但是他的口算能力非常弱。因此他找到了小 T,给了小 T 一个长度为 n 的正
整数序列 a1, a2, ..., an,要求小 T 抛出 m 个问题以训练他的口算能力。
每个问题给出三个正整数 l, r, d,小 Q 需要通过口算快速判断 al × al+1 × ... × ar−1 × ar 是不是 d
的倍数。
小 Q 迅速地回答了出来,但是小 T 并不知道正确答案是什么,请写一个程序帮助小 T 计算这些问
题的正确答案。
Input
第一行包含一个正整数 T(1 ≤ T ≤ 10),表示测试数据的组数。
每组数据第一行包含两个正整数 n, m(1 ≤ n, m ≤ 100000),分别表示序列长度以及问题个数。
第二行包含 n 个正整数 a1, a2, ..., an(1 ≤ ai ≤ 100000),表示序列中的每个数。
接下来 m 行,每行三个正整数 l, r, d(1 ≤ l ≤ r ≤ n, 1 ≤ d ≤ 100000),表示每个问题。
Output
对于每个问题输出一行,若是倍数,输出“Yes”,否则输出“No”。
Examples
stdin
1
5 4
6 4 7 2 5
1 2 24
1 3 18
2 5 17
3 5 35
stdout
Yes
No
No
Yes
sol:这题数据 ai 很小,所以XJB搞搞就能过,就把<=sqrtai的ai的质因数筛出来,然后记个数组,对于>=sqrtai的约数肯定只有一个,所以开个vector特判一下就能过了
#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=,B=;
int n,m;
int Prim[N];
bool Bo[N];
int S[N][B];
vector<int>Pos[N];
inline void Shai(int Up)
{
int i,j;
Bo[]=Bo[]=;
for(i=;i<=Up;i++)
{
if(!Bo[i]) Prim[++*Prim]=i;
for(j=;j<=*Prim&&(Prim[j]*i<=Up);j++)
{
Bo[Prim[j]*i]=;
if(i%Prim[j]==) break;
}
}
return;
}
int main()
{
int i,j;
Shai();
R(n); R(m);
for(i=;i<=n;i++)
{
int x=read();
for(j=;j<=*Prim;j++)
{
S[i][j]=S[i-][j];
if(x%Prim[j]==)
{
while(x%Prim[j]==)
{
S[i][j]++; x/=Prim[j];
}
}
}
if(x>) Pos[x].push_back(i);
}
while(m--)
{
int l=read(),r=read(),x=read();
bool Bo=;
for(j=;j<=*Prim;j++) if(x%Prim[j]==)
{
int oo=;
while(x%Prim[j]==)
{
oo++; x/=Prim[j];
}
if(S[r][j]-S[l-][j]<oo)
{
Bo=; break;
}
}
if(x>)
{
vector<int>::iterator it=lower_bound(Pos[x].begin(),Pos[x].end(),l);
int Wz;
if(it!=Pos[x].end()) Wz=(*it);
else Wz=n+;
if(Wz>r) Bo=;
}
(Bo)?(puts("No")):puts("Yes");
}
return ;
}
/*
input
5 4
6 4 7 2 5
1 2 24
1 3 18
2 5 17
3 5 35
output
Yes
No
No
Yes input
5 1
2087 2 2 2 2
1 2 4174
output
Yes
*/
bzoj5358的更多相关文章
- [BZOJ5358]/[HDU6287]口算训练
[BZOJ5358]/[HDU6287]口算训练 题目大意: 给定一个长度为\(n(n\le10^5)\)的正整数序列\(a_{1\sim n}\),\(m(m\le10^5)\)次询问.每次询问给出 ...
- [Lydsy1805月赛]口算训练 BZOJ5358
分析: 没想到这道题还能二分查找... 这题主席树的话,裸的很显然...我们将每一个数分解质因数,之后建一个可持久化权值线段树维护[L,R]区间内的每一种质因子的个数,分解质因数的话,可以选择用线筛, ...
- [Bzoj5358][Lydsy1805月赛]口算训练(预处理+动态开点线段树)
5358: [Lydsy1805月赛]口算训练 Time Limit: 5 Sec Memory Limit: 512 MBSubmit: 318 Solved: 105[Submit][Stat ...
随机推荐
- 【React】开发一个城市选择控件
想到做这个,是因为无意中在github上看到了这一个仓库https://github.com/lunlunshiwo/ChooseCity,做的就是一个城市选择控件,是用vue写的,说的是阿里的一道题 ...
- Go+Python双剑合璧
目的 Python调用Go的方法,Python有很多功能强悍又使用简洁的库.而新生军Go的多核心利用率也是非常强悍的.当然这是明面上的优点.反正你有很多理由想要让Python能够调用Go的方法. 实验 ...
- Taro、Weex、Hippy 齐聚IMWebConf 2018!
IMWebConf 2018 前端大会,10 月 14 日重磅来袭! 想了解 2018 前端前沿技术和发展趋势?想挖掘前端更深远的价值?就在这个秋季,第七届 IMWebConf 大会重磅来袭,我们邀请 ...
- 如何在Github中删除已有仓库或文件
一.删除已有仓库如果我们想要删除Github中没有用的仓库,应该如何去做呢? 进入到我们需要删除的仓库里面,找到“settings”即仓库设置: 然后,在仓库设置里拉到最底部,找到“Danger Zo ...
- 插入排序专题 直接插入 折半 希尔shell
1.直接插入排序 分析:a[n]有n个元素 a[0...n-1] 从 i=1...n-1 a[i]依次与 a[0...n-2]数字进行比较 发现后面的数字大于前面的数字交换位置,每一次比较,与 ...
- Sparse Principal Component Analysis via Regularized Low Rank Matrix Approximation(Adjusted Variance)
目录 前言 文章概述 固定\(\widetilde{\mathrm{v}}\) 固定\(\widetilde{\mathrm{u}}\) Adjusted Variance 前言 这篇文章用的也是交替 ...
- Nginx会话保持之nginx-sticky-module模块
Nginx会话保持之nginx-sticky-module模块 - 天行健,君子以自强不息:地势坤,君子以厚德载物. - CSDN博客https://blog.csdn.net/huangjinjin ...
- Web系统大规模并发——秒杀与抢购 秒杀系统优化与预防措施
电商的秒杀和抢购,对我们来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要.这次我们 ...
- mysql之整型数据int
mysql数据库设计,其中,对于数据性能优化,字段类型考虑很重要,mysql整型bigint.int.mediumint.smallint 和 tinyint的语法介绍,如下:1.bigint 从 - ...
- jmeter内存溢出解决办法
原文:http://blog.51cto.com/xqtesting/2107927 使用jmeter进行压力测试时遇到一段时间后报内存溢出outfmenmory错误,导致jmeter卡死了,先尝试在 ...