[ABC238G] Cubic?
Problem Statement
Given a sequence $A$ of $N$ numbers, answer the following $Q$ questions.
- In the $i$-th question, you are given integers $L_i$ and $R_i$. Is $A_{L_i} \times A_{L_i+1} \times \dots \times A_{R_i}$ a cubic number?
Here, a positive integer $x$ is said to be a cubic number when there is a positive integer $y$ such that $x=y^3$.
Constraints
- All values in input are integers.
- $1 \le N,Q \le 2 \times 10^5$
- $1 \le A_i \le 10^6$
- $1 \le L_i \le R_i \le N$
Input
Input is given from Standard Input in the following format:
$N$ $Q$
$A_1$ $A_2$ $\dots$ $A_N$
$L_1$ $R_1$
$L_2$ $R_2$
$\vdots$
$L_Q$ $R_Q$
Output
Print $Q$ lines.
The $i$-th line should contain Yes if, in the $i$-th question, $A_{L_i} \times A_{L_i+1} \times \dots \times A_{R_i}$ is a cubic number, and No otherwise.
The checker is case-insensitive; output can be either uppercase or lowercase.
Sample Input 1
8 5
7 49 30 1 15 8 6 10
1 2
2 3
4 4
5 8
3 8
Sample Output 1
Yes
No
Yes
No
Yes
- For the first question, $7 \times 49 = 343$ is a cubic number.
- For the second question, $49 \times 30 = 1470$ is not a cubic number.
- For the third question, $1$ is a cubic number.
- For the fourth question, $15 \times 8 \times 6 \times 10 = 7200$ is not a cubic number.
- For the fifth question, $30 \times 1 \times 15 \times 8 \times 6 \times 10 = 216000$ is a cubic number.
一个有亿种方法的题目。
什么情况下乘积为立方数?当且仅当分解后所有的素数的指数都是3的倍数。 \(A_i\le 10^6\),所以先预处理出每一种数的各种质因子。
法一:莫队
这就不用说了吧。加入时枚举每个质因子,维护有多少个质因子的指数模3余0。复杂度 \(O(n\sqrt{n}logn)\),3秒钟已经是能过得了。
法二:普通哈希
给每个质数分配一个随机权值 \(g_i\),如果前 \(i\) 个数质数 \(i\) 指数 \(p_i\) 模 3 为 \(k_i\),那么定义 \(hash(1,n)=\sum\limits_{j=1}^{10^6}g_ik_i\)。处理出前缀 \(h_i=hash(1,i)\),因为 \(h_i\) 到 \(h_{i+1}\) 会变化的就是在每个因数中加了或减去几个随机权值。若 \([l,r]\) 符合条件,那么 \(h_{l-1}=h_r\)。判断即可。
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5,P=998244353;
int n,q,a[N],l,r,pri[N],c[N],op;
long long s[N],f[N];
vector<int>g[N];
int main()
{
srand(time(0));
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
scanf("%d",a+i);
for(int i=1;i<N;i++)
f[i]=1LL*rand()*rand()%P;
for(int i=2;i<N;i++)
{
if(!pri[i])
{
g[i].push_back(i);
for(int j=2;j*i<N;j++)
g[j*i].push_back(i),pri[j*i]=1;
}
}
for(int i=1;i<=n;i++)
{
s[i]=s[i-1];
for(int j=0;j<g[a[i]].size();j++)
{
int k=a[i],cnt=0;
while(k%g[a[i]][j]==0)
k/=g[a[i]][j],++cnt;
op=((c[g[a[i]][j]]+cnt)%3-c[g[a[i]][j]]%3);
c[g[a[i]][j]]+=cnt;
(s[i]+=(1LL*f[g[a[i]][j]]*op%P+P)%P)%=P;
}
}
while(q--)
{
scanf("%d%d",&l,&r);
if(s[r]==s[l-1])
printf("Yes\n");
else
printf("No\n");
}
}
[ABC238G] Cubic?的更多相关文章
- 3DShader之立方体环境映射(cubic environment mapping)
前面讲了球形环境映射,然而目前采用更多的是立方体环境映射.国际惯例:上图先: 1.反射: 2.折射 3.fresnel(反射+折射) 4.色散 好了,大概讲下原理, 立方体纹理我就不多讲了,它以一个3 ...
- BITMAP图片压缩算法三则--bilinear、nearest、cubic
原文:http://blog.chinaunix.net/uid-253932-id-3037805.html 工作需要,要弄截图且缩小.截图倒是好说,WIN API可以搞定,但是缩小且尽量不失真,这 ...
- 泡泡一分钟:Cubic Range Error Model for Stereo Vision with Illuminators
Cubic Range Error Model for Stereo Vision with Illuminators 带有照明器的双目视觉的三次范围误差模型 "链接:https://pan ...
- cubic与spline插值点处的区别
cubic与spline都是Matlab的三次样条插值法,但是它们在插值点处仍然有着很微妙的区别,这个区别说明不了两种方法的好坏,只能根据实际情况进行合理筛选.以一维插值为例: clc clear % ...
- UVA-1604 Cubic Eight-Puzzle (双向BFS+状态压缩+限制搜索层数)
题目大意:立体的八数码问题,一次操作是滚动一次方块,问从初始状态到目标状态的最少滚动次数. 题目分析:这道题已知初始状态和目标状态,且又状态数目庞大,适宜用双向BFS.每个小方块有6种状态,整个大方格 ...
- tcp cubic代码分析
/* * TCP CUBIC: Binary Increase Congestion control for TCP v2.3 * Home page: * http://netsrv.csc.ncs ...
- hdu 6216 A Cubic number and A Cubic Number【数学题】
hdu 6216 A Cubic number and A Cubic Number[数学] 题意:判断一个素数是否是两个立方数之差,就是验差分.. 题解:只有相邻两立方数之差才可能,,因为x^3-y ...
- 从CUBIC/BBR的TCP ACK失速说起
上周有同事问,延迟ACK到底对应用层会产生什么后果,我也不知道该如何作答,于是丢了一个链接: TCP之Delay ACK在Linux和Windows上实现的异同-Linux的自适应ACK: 是的,这是 ...
- HDU 6216 A Cubic number and A Cubic Number【数学思维+枚举/二分】
Problem Description A cubic number is the result of using a whole number in a multiplication three t ...
- 2017青岛网络赛1011 A Cubic number and A Cubic Number
A Cubic number and A Cubic Number Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65535/3276 ...
随机推荐
- Linux 内核音频子系统调试
debugfs 文件系统 debugfs 可以为 Linux 内核各个模块的分析调试,提供许多信息,如音频子系统的 ASoC,以及 tracing 等.debugfs 文件系统可以通过命令行工具挂载, ...
- 自定义注解,实现请求缓存【Spring Cache】
前言 偶尔看到了spring cache的文章,我去,实现原理基本相同,哈哈,大家可以结合着看看. 简介 实际项目中,会遇到很多查询数据的场景,这些数据更新频率也不是很高,一般我们在业务处理时,会对这 ...
- RocketMQ 系列(四) 消息存储
RocketMQ 系列(四) 消息存储 本文是 RocketMQ 系列的第四篇,下面是前面几篇的文章,不清楚的话点击看一下吧. RocketMQ系列(一) 基本介绍 RocketMQ 系列(二) 环境 ...
- Htttpclien循环自动生成图片,同时发送参数和文件,模拟http的post请求
package org.jeecg.modules.bussiness.PostTests; import com.sun.tools.internal.xjc.reader.xmlschema.bi ...
- netstat命令输出详解
netstat命令输出详解 1. 列出所有的TCP和UDP端口 2. 命令输出详解 Proto:协议名(tcp协议还是udp协议) recv-Q:网络接收队列,send-Q:网路发送队列 a. rec ...
- 异常:no transaction is in progress
转载请注明出处: 在使用 @Scheduled 注解创建了一个定时任务,并通过定时任务不断向mysql写入数据,写入数据的方式是通过 jpa 的方式,在代码运行的过程中出现错误:no transac ...
- Markdown · Typora | 基本画图技巧
如果想画一些简单的状态图,可以使用 typora 自带的 mermaid 工具. (mermaid 不止能画简单的状态图,还能画流程图等,详见参考资料) 定义节点 可以定义不同形状的节点,并为节点添加 ...
- [自制工具]简便易用的ADDM报告生成工具
■■ Oracle ADDM简介 ADDM全称是Automatic Database Diagnostic Monitor,是Oracle实现性能自我诊断的最佳利器.它依赖于AWR,我们知道AWR会自 ...
- 11g GI监听测试增加其他本地端口
11.2 GI中监听器的地址和端口信息被移到了 endpoints_listener.ora中. 使用 endpoints_listener.ora的情况下不应使用lsnrctl管理LISTENER, ...
- 《数据结构》王卓老师 p48-p62学习反馈
跟着青岛大学-王卓老师的视频进行到链队列时,运行链队列代码的时候遇到了两个问题: 1.)Program received signal SIGSEGV Segmentation fault 附代码: ...