题意:

小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. Python科学计算PDF

    Python科学计算(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VYs9BamMhCnu4rfN6TG5bg 提取码:2zzk 复制这段内容后打开百度网盘手机A ...

  2. Java_比较两个图片的相似度

    说明:目前使用像素偏移量为5,可根据实际情况相应修改 package com.creditease.fetch.credit.util.similarity; import com.crediteas ...

  3. 关于*.ashx 处理程序调试时 未能创建类型 错误

    出现改问题的根本原因是因为,我更改过改类型的名字,而IDE并没有更改  ***.ashx. 注册类型名字. 所更改的类的名字应该是  "项目名字.文件名字“ 例如下图 应该更改类为 ”Wx_ ...

  4. Java 中 String 的字面量与 intern 方法

    下方代码主要说明: String b = new String("xyz")  创建2个对象,一个在常量池中的 "xyz",一个 String 实例对象,返回的 ...

  5. idea创建的java web项目打包发布到tomcat

    File-> Project Structure... 点击Artifacts->+号 点击Web Application:Archive->选择与你的项目对应的那一项Artifac ...

  6. JDBC的理解

    import java.sql.*;//倒入java.sql包 public class JDBC { //封装没有返回值的jdbc函数(Update) --适用于增 删 改 public stati ...

  7. linux CentOS 安装 nginx

    官方网址:http://nginx.org/en/download.html 一.安装基础组件 yum install gcc-c++ yum install pcre yum install pcr ...

  8. VUE组件间数据方法的传递,初步了解

    父组件的数据传递到子组件: 子组件:(其中fMsg是要从父组件传递过来的数据,注意fMsg要在子组件props里先定义) 父组件:(使用v-bind,将自身数据绑定给中转属性fMsg,从而通过 子组件 ...

  9. 一对一关联模型,HAS_ONE

    class UserModel extends RelationModel{ protected $_link = array( 'Profile'=> HAS_ONE, //就这一行就行了 ) ...

  10. python学习笔记1-基础知识

    # 0.输入输出 # print数值型直接输出计算结果 pirnt( + ) # 输出 + = # input输入(可在括号内加提示语句) name = input('please enter you ...