题意:

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

每个问题给出三个正整数l,r,dl,r,d,小Q需要通过口算快速判断al×al+1×...×ar−1×aral×al+1×...×ar−1×ar是不是dd的倍数。

小Q迅速地回答了出来,但是小T并不知道正确答案是什么,请写一个程序帮助小T计算这些问题的正确答案。

思路:

一开始bit套map 用前缀和处理,tle了?

对于每一个输入的数字,分解质因子,对于每一个质因子,把这个数字的位置push到这个质因子的vector里面去。

那么每一个vector里面的数字就是非递减的了。

然后对于每一个输入的l,r,d,把d分解质因子,对于每一个质因子,在这个质因子的vector里面找第一个大于等于l的位置和最后一个小于等于r的位置,相减,比较是否有d中这个质因子的数量多。

找的时候当然利用前面的非递减,所以可以二分。

代码:

 #include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 1e5 + ; vector<int> p;
vector<int> G[N],g[N];
bool pp[N];
int a[N];
int n,m; int main()
{
for (int i = ;i < N;i++)
{
if (!pp[i])
{
p.push_back(i);
for (int j = i * ;j < N;j += i)
{
G[j].push_back(i);
pp[j] = ;
}
}
}
int T;
scanf("%d",&T);
while (T--)
{
scanf("%d%d",&n,&m);
for (int i = ;i < p.size();i++)
{
g[p[i]].clear();
}
for (int i = ;i <= n;i++)
{
int x;
scanf("%d",&x);
if (x == ) continue;
if (!pp[x])
{
g[x].push_back(i);
continue;
}
for (int j = ;j < G[x].size();j++)
{
int cnt = ;
int tmp = x;
int v = G[x][j];
while (tmp % v == )
{
tmp /= v;
g[v].push_back(i);
}
}
}
while (m--)
{
int l,r,d;
scanf("%d%d%d",&l,&r,&d);
if (d == )
{
puts("Yes");
continue;
}
if (!pp[d])
{
int x = lower_bound(g[d].begin(),g[d].end(),l) - g[d].begin();
int y = upper_bound(g[d].begin(),g[d].end(),r) - g[d].begin();
y--;
if (y - x + < ) puts("No");
else puts("Yes");
}
else
{
bool f = ;
for (int i = ;i < G[d].size();i++)
{
int v = G[d][i];
int cnt = ;
int tmp = d;
while (tmp % v == )
{
cnt++;
tmp /= v;
}
int x = lower_bound(g[v].begin(),g[v].end(),l) - g[v].begin();
int y = upper_bound(g[v].begin(),g[v].end(),r) - g[v].begin();
y--;
if (y - x + < cnt) f = ;
if (f) break;
}
if (f) puts("No");
else puts("Yes");
}
}
}
return ;
}

hdu 6287 口算训练的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. [Lydsy1805月赛]口算训练 BZOJ5358

    分析: 没想到这道题还能二分查找... 这题主席树的话,裸的很显然...我们将每一个数分解质因数,之后建一个可持久化权值线段树维护[L,R]区间内的每一种质因子的个数,分解质因数的话,可以选择用线筛, ...

  7. WPF简单的口算案例

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

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

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

  9. 《口算大作战 2》DLC:算法真奇妙

    211614331 王诚荣 211614354 陈斌 --第一次结对作业 DLC DLC:三年级混合运算模块现已更新!现在您可以愉快的使用三年级题库啦.同时您必须拥有本体才能使用此DLC 单击此处查看 ...

随机推荐

  1. 探索JavaScript中Null和Undefined的深渊

    当讨论JavaScript中的原始数据类型时,大多数人都知道的基本知识,从String,Number到Boolean.这些原始类型相当简单,行为符合常识.但是,本文将更多聚焦独特的原始数据类型Null ...

  2. 为什么很多应用都安装在/usr/local目录下?

    首先,Linux的官方文档FHS对该目录的说明:http://www.linuxbase.org/betaspecs/fhs/fhs/ch04s09.html The /usr/local hiera ...

  3. 【循环数组的最大字串和】Maximal-sum Subsequence

    [循环数组的最大字串和]Maximal-sum Subsequence PROBLEM 题目描述 给一个 N×N 的矩阵 M,可以取连续的一段数(必须是横着或者竖着或者斜着,这个矩阵是循环的,具体如下 ...

  4. 顺序表的原理与python中的list类型

    数据是如何在内存中存储的? 在32位的计算机上,1个字节有8位,内存寻址的最小单位就是字节.假设我们有一个int类型的值,它从0x10开始,一个int占据4个字节,则其结束于0x13. 那么数据类型有 ...

  5. elasticsearch之分词插件使用

    elasticsearch对英文会拆成单个单词,对中文会拆分成单个字.下面来看看是不是这样. 首先测试一下英文: GET /blog/_analyze { "text": &quo ...

  6. virtualenvwrapper虚拟环境

    之前学习过python的虚拟环境virtualenv,而virtualenvwrapper这个软件包可以让我们管理虚拟环境变得更加简单,不用再跑到某个目录下通过virtualenv来创建虚拟环境,并且 ...

  7. 去除CKFinder版权提示信息

    CkFinder版权提示有两个地方,分别在树形列表下方和文件列表框上部,可以通过修改CSS来隐藏内容 因原始JS文件中的文本都是编码过的,类似 var x="\103\x6f\156\x6e ...

  8. js图片预加载与延迟加载

    图片预加载的机制原理:就是提前加载出图片来,给前端的服务器有一定的压力. 图片延迟加载的原理:为了缓解前端服务器的压力,延缓加载图片,符合条件的时候再加载图片,当然不符合的条件就不加载图片.​ 预加载 ...

  9. Django学习之django自带的contentType表 GenericRelation GenericForeignKey

    Django学习之django自带的contentType表   通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/a ...

  10. go 并发编程(1)

    优雅的并发编程范式,完善的并发支持,出色的并发性能是go语言区别于其他语言的一大特色. 1.并发基础 win和linux 出现之前,程序员并没有并发的概念.因为命令式程序设计语言是以串行为基础的,程序 ...