给出一个长度为\(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\),我们要计算的就是:

\[\begin{aligned}
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的更多相关文章

  1. 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] 表示第 ...

  2. 2017年学习的三个CSS新特性

    这是翻译的一篇文章,原文是:3 New CSS Features to Learn in 2017,翻译的不是很好,如有疑问欢迎指出. 新的一年,我们有一系列新的东西要学习.尽管CSS有很多新的特性, ...

  3. [SinGuLaRiTy] COCI 2016~2017 #5

    [SinGuLaRiTy-1012] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 最近神犇喜欢考COCI...... 测试题目 对于所有的 ...

  4. 消息:SQL Server 2017(vNext)的第三个公开的CTP(社区技术预览版)发布了

    今天看到了一个新闻,跟大家分享一下,有兴趣的可以去尝试一下. SQL Server 2017 CTP3于5月23日发布了,详细版本号是6.7.55.0. 大家可以去安装试试.在下载页面,目前是SQL  ...

  5. cs231n spring 2017 lecture13 Generative Models 听课笔记

    1. 非监督学习 监督学习有数据有标签,目的是学习数据和标签之间的映射关系.而无监督学习只有数据,没有标签,目的是学习数据额隐藏结构. 2. 生成模型(Generative Models) 已知训练数 ...

  6. [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: ...

  7. 论文笔记: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 ...

  8. ICCV 2017论文分析(文本分析)标题词频分析 这算不算大数据 第一步:数据清洗(删除作者和无用的页码)

    IEEE International Conference on Computer Vision, ICCV 2017, Venice, Italy, October 22-29, 2017. IEE ...

  9. XTU 1267 - Highway - [树的直径][2017湘潭邀请赛H题(江苏省赛)]

    这道题可能有毒……总之一会儿能过一会儿不能过的,搞的我很心烦…… 依然是上次2017江苏省赛的题目,之前期末考试结束了之后有想补一下这道题,当时比较懵逼不知道怎么做……看了题解也不是很懂……就只好放弃 ...

随机推荐

  1. 20155316 2016-2017-2 《Java程序设计》第10周学习总结

    教材学习内容总结 Java和Android开发学习指南(第二版)第22章 Java 密码技术 教材学习中的问题和解决过程 1.什么叫柯克霍夫原则? 数据的安全基于密钥而不是算法的保密. 也就是说系统的 ...

  2. 20155327李百乾 Exp3 免杀原理与实践

    20155327李百乾 Exp3 免杀原理与实践 实践guocheng 一.Msfvenom使用编码器 1.利用(virustota)[https://www.virustotal.com/]检测实验 ...

  3. echarts 柱状图移除圆角

    itemStyle: { normal: { color: '#59519f', barBorderColor: '#59519f', barBorderWidth: 6, barBorderRadi ...

  4. thinkphp 去除空格

  5. Objective-C 方法交换实践(二) - 方法指针交换

    一. 基本函数 根据 sel 得到 class 的实例方法 Method class_getInstanceMethod(Class cls, SEL name) 根据 sel 得到 class 的函 ...

  6. C、C++字符操作归总

    1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...

  7. dubbo 微服务

    # spring-dubbo-service 微服务 项目地址:https://github.com/windwant/spring-dubbo-service spring dubbo servic ...

  8. kubernetes nfs-client-provisioner外部存储控制器

    介绍: nfs-client-provisione是一个专门用于NFS外部目录挂载的控制器,当多个副本创建时,他们的命名方式如下: pv provisioned as ${namespace}-${p ...

  9. 基于kcp,consul的service mesh实现

    名字kmesh 技术:proxy,kcp,consul proxy proxy分为前端和后端 前端代理服务层,包括外部的service 后端实现负债均衡 kcp kcp 基于udp,能够实现快速的传输 ...

  10. centos下部署jenkins

    本文摘抄自:https://www.cnblogs.com/edward2013/p/5284503.html  ,请支持原版! 1. 安装JDK 1 yum -y install java 2.安装 ...