题意:

小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. PAT Basic 1032

    1032 挖掘机技术哪家强 (20 分) 为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 1 ...

  2. [LeetCode] Goat Latin 山羊拉丁文

    A sentence S is given, composed of words separated by spaces. Each word consists of lowercase and up ...

  3. [LeetCode] Champagne Tower 香槟塔

    We stack glasses in a pyramid, where the first row has 1 glass, the second row has 2 glasses, and so ...

  4. PHP 数组按多个字段排序

      $array1 = array(       0=>array('id'=>8,'name'=>'Apple','age'=> 18),       1=>array ...

  5. Havel-Hakimi定理的方法来构图

    给定一组非负数字,(数字为节点的度),判断该组数字能不能构成图. Havel-Hakimi定理: 将序列按照从大到小排序之后,从第二个数开始到第一个数的长度+1为止,依次减1.每操作一次,删掉第一个数 ...

  6. es6 ...克隆与函数深度克隆

    es6的...运算, 可以进行一层的深度克隆; 在多层的情况下,不要用这种啊. 用深度克隆函数,或者JSON.parse(JSON.stringify(obj)),但json方式要求不能有属性值是函数 ...

  7. 甘特图dhtmlx Gantt入门

    (以下截图来自别人的博客,来源地址已经忘记了,若后期找到会补充上来!) API地址:https://docs.dhtmlx.com/gantt/desktop__guides.html,这是英文的网页 ...

  8. centos开启防火墙

    https://www.cnblogs.com/oskyhg/p/8011001.html

  9. spring boot异常积累

    1.异常:Error resolving template "xxx", template might not exist or might not be accessible.. ...

  10. linux 的基础命令

    date  查看时间 cal 查看日历    cal 2009    cal 10 2019  ls 查看目录下的内容     ls -alh  tree  以树的形式查看目录内容 bc  计算器 M ...