ICPCCamp 2017 I Coprime Queries
给出一个长度为\(n\)的正整数序列\(a\),\(m\)次询问\(l,r,x\),问\(max\{i|i\in[l,r],gcd(a_i,x)=1\}\)。
\(n,m,a_i\le 10^5\)。
分析
这个题很妙啊。
二分答案,问题变成判断在一个区间\([l,r]\)中是否存在\(gcd(a_i,x)=1\),变成判断\([l,r]\)中有多少个\(gcd(a_i,x)\ne 1\),我们要计算的就是:
ret&=\sum _{i=L}^R[gcd(a_i,x)\ne 1] \\
&=\left[\sum _{i=L}^R\sum _{d|x,d|a_i}\mu (d)\right]=0 \\
\end{aligned}
\]
这个怎么算呢?我们注意到,如果\(d\)含有平方因子,那么\(\mu (d)\)必定是0,不需要去计算,所以我们只需要统计无平方因子数。可以发现,对于\(10^5\)以内的数,它的无平方因子非常少,最多为64个(\(2*3*5*7*11*13*17>10^5\)),所以直接枚举就好了。对于\([1,10^5]\)内的所有无平方因子数,我们记录含有它的每个\(a_i\)的下标\(i\),每次对于询问的\(x\)在区间内二分计算即可。
复杂度约为\(O(64nlog^2n)\)。
代码
#include<cstdio>
#include<cctype>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long giant;
int read() {
int x=0,f=1;
char c=getchar();
for (;!isdigit(c);c=getchar()) if (c=='-') f=-1;
for (;isdigit(c);c=getchar()) x=x*10+c-'0';
return x*f;
}
const int maxn=1e5+1;
int a[maxn],pm[maxn],ps=0,mu[maxn],from[maxn];
int sf[maxn],id[maxn],fs=0;
bool np[maxn];
vector<int> vec[maxn],my[maxn];
int many(int l,int r,int d) {
++r;
int fx=lower_bound(vec[d].begin(),vec[d].end(),l)-vec[d].begin();
int fy=lower_bound(vec[d].begin(),vec[d].end(),r)-vec[d].begin();
return fy-fx;
}
bool ok(int l,int r,int x) {
int ret=0;
for (int d:my[x]) {
int gs=many(l,r,d);
ret+=mu[d]*gs;
}
return ret;
}
int main() {
#ifndef ONLINE_JUDGE
freopen("test.in","r",stdin);
freopen("my.out","w",stdout);
#endif
int n=read(),q=read();
mu[1]=1;
for (int i=2;i<maxn;++i) {
if (!np[i]) pm[++ps]=i,mu[i]=-1,from[i]=1;
for (int j=1;j<=ps && (giant)pm[j]*i<maxn;++j) {
int tmp=pm[j]*i;
from[tmp]=i;
np[tmp]=true;
if (i%pm[j]==0) {
mu[tmp]=0;
break;
}
mu[tmp]=-mu[i];
}
}
for (int i=1;i<maxn;++i) if (mu[i]) sf[++fs]=i,id[i]=fs;
for (int i=1;i<maxn;++i) {
for (int j=1;(giant)j*j<=i;++j) if (i%j==0) {
if (mu[j]) my[i].push_back(j);
if ((giant)j*j!=i && mu[i/j]) my[i].push_back(i/j);
}
}
for (int i=1;i<=n;++i) {
int x=a[i]=read();
for (int d:my[x]) vec[d].push_back(i);
}
while (q--) {
int l=read(),r=read(),x=read(),mid,ans=-1;
while (l<=r) {
int mid=l+r>>1;
if (ok(mid,r,x)) l=mid+1,ans=mid; else r=mid-1;
}
printf("%d\n",ans);
}
return 0;
}
ICPCCamp 2017 I Coprime Queries的更多相关文章
- CF&&CC百套计划2 CodeChef December Challenge 2017 Chef And Easy Xor Queries
https://www.codechef.com/DEC17/problems/CHEFEXQ 题意: 位置i的数改为k 询问区间[1,i]内有多少个前缀的异或和为k 分块 sum[i][j] 表示第 ...
- 2017年学习的三个CSS新特性
这是翻译的一篇文章,原文是:3 New CSS Features to Learn in 2017,翻译的不是很好,如有疑问欢迎指出. 新的一年,我们有一系列新的东西要学习.尽管CSS有很多新的特性, ...
- [SinGuLaRiTy] COCI 2016~2017 #5
[SinGuLaRiTy-1012] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 最近神犇喜欢考COCI...... 测试题目 对于所有的 ...
- 消息:SQL Server 2017(vNext)的第三个公开的CTP(社区技术预览版)发布了
今天看到了一个新闻,跟大家分享一下,有兴趣的可以去尝试一下. SQL Server 2017 CTP3于5月23日发布了,详细版本号是6.7.55.0. 大家可以去安装试试.在下载页面,目前是SQL ...
- cs231n spring 2017 lecture13 Generative Models 听课笔记
1. 非监督学习 监督学习有数据有标签,目的是学习数据和标签之间的映射关系.而无监督学习只有数据,没有标签,目的是学习数据额隐藏结构. 2. 生成模型(Generative Models) 已知训练数 ...
- [Codeforces 863D]Yet Another Array Queries Problem
Description You are given an array a of size n, and q queries to it. There are queries of two types: ...
- 论文笔记:Dynamic Multimodal Instance Segmentation Guided by Natural Language Queries
Dynamic Multimodal Instance Segmentation Guided by Natural Language Queries 2018-09-18 09:58:50 Pape ...
- ICCV 2017论文分析(文本分析)标题词频分析 这算不算大数据 第一步:数据清洗(删除作者和无用的页码)
IEEE International Conference on Computer Vision, ICCV 2017, Venice, Italy, October 22-29, 2017. IEE ...
- XTU 1267 - Highway - [树的直径][2017湘潭邀请赛H题(江苏省赛)]
这道题可能有毒……总之一会儿能过一会儿不能过的,搞的我很心烦…… 依然是上次2017江苏省赛的题目,之前期末考试结束了之后有想补一下这道题,当时比较懵逼不知道怎么做……看了题解也不是很懂……就只好放弃 ...
随机推荐
- 20155306 2016-2017-2 《Java程序设计》第十周学习总结
20155306 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 Java和Android开发学习(网络) 网络概览 计算机网络体系结构的通信协议划分为七层, ...
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛
A There is a tree with nn nodes, at which attach a binary 64*6464∗64 matrix M_i (1 \le i \le n)M i ...
- day 7 引用
1.b=a在c语言和python中的区别 c语言:a=100 a变量里面放的100 b = a b变量里面也放的100 python : a=100 内存中有个100 a放的100 ...
- 【LOJ6433】【PKUSC2018】最大前缀和
[LOJ6433][PKUSC2018]最大前缀和 题面 题目描述 小 C 是一个算法竞赛爱好者,有一天小 C 遇到了一个非常难的问题:求一个序列的最大子段和. 但是小 C 并不会做这个题,于是小 C ...
- dp合集 广场铺砖问题&&硬木地板
dp合集 广场铺砖问题&&硬木地板 很经典了吧... 前排:思想来自yali朱全民dalao的ppt百度文库免费下载 后排:STO朱全民OTZ 广场铺砖问题 有一个 W 行 H 列的广 ...
- 【Windows定时关机】windows实现定时关机与取消
背景:本人昨晚本来打算将电脑设置为晚上12点 30定时关机,结果写成了:12:30,所以就在刚才,我正玩游戏的时候, 电脑弹出提示:“windows将在一分钟内关闭”,我刚开始一脸懵逼,后来打开昨天敲 ...
- FTP如何通过Windows防火墙
将C:\Windows\SysWOW64\ftp.exe(64位系统)C:\Windows\system32\ftp.exe(32位系统)文件添加到防火墙的允许列表中即可. 注:“控制面板” -> ...
- 413. Reverse Integer【LintCode java】
Description Reverse digits of an integer. Returns 0 when the reversed integer overflows (signed 32-b ...
- Smokeping配置
参考文档: 官网:http://oss.oetiker.ch/smokeping/ 参考:http://jaminzhang.github.io/monitoring/smokeping-deploy ...
- mysql基础知识大全
前言:本文主要为mysql基础知识的大总结,mysql的基础知识很多,这里作简单概括性的介绍,具体的细节还是需要自行搜索.当然本文还有很多遗漏的地方,后续会慢慢补充完善. 数据库和数据库软件 数据库是 ...