题目大意:

给定n个数

m个询问 询问l r区间内的孤独数的个数

孤独数的定义为在该区间内与其他所有数互质的数

看注释

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+;
struct NODE {
int l,r,id;
bool operator <(const NODE& p)const {
return id>p.id;
}
}a[N], q[N];
bool cmp(NODE& p,NODE& q) {
return p.l<q.l;
}
int T[N];
void addT(int i,int x) {
while(i<=N) {
T[i]+=x;
i+=-i&i;
}
}
int sum(int i) {
int res=;
while(i) {
res+=T[i];
i-=-i&i;
} return res;
}
int n,m,cur[N],ans[N];
vector <int> vec[N];
bool isprime[N];
void prime() {
memset(isprime,,sizeof(isprime));
for(int i=;i<N;i++)
if(isprime[i]){
for(int j=i;j<N;j+=i)
isprime[j]=, vec[j].push_back(i);
}
}// 筛出质数表 vec[j]内为j的所有质因子
int main()
{
prime();
while(~scanf("%d%d",&n,&m)) {
memset(T,,sizeof(T));
memset(cur,,sizeof(cur));
for(int i=;i<=n;i++) {
int x; scanf("%d",&x);
a[i].l=, a[i].r=n+, a[i].id=i;
// 第i个数的最大互质区间为开区间(l,r)
for(int j=;j<vec[x].size();j++){
int t=vec[x][j];
if(cur[t]) {// cur[t]为上一个以t为质因子的数的位置
a[i].l=max(a[i].l,cur[t]);
a[cur[t]].r=min(a[cur[t]].r,a[i].id);
} // 处理第i个数x的最大互质区间
cur[t]=a[i].id; // 更新cur[t]
}
}
for(int i=;i<=m;i++)
scanf("%d%d",&q[i].l,&q[i].r), q[i].id=i;
sort(a+,a++n,cmp);
sort(q+,q++m,cmp);
priority_queue <NODE> que; // 保存树状数组维护的数 并按位置从小到大排
for(int i=,j=;i<=m;i++) {
// 若树状数组维护的区间中
// 有位置不包含在当前查询区间内部的 应该先清除
while(!que.empty() && que.top().id<q[i].l) {
addT(que.top().id,-);
addT(que.top().r,);
que.pop();
}
// 若有互质区间左端超过查询区间的左端
// 则有可能是查询区间内的孤独数 加入树状数组
while(j<=n && a[j].l<q[i].l) {
addT(a[j].id,);
addT(a[j].r,-); // 将该数所在的位置到其互质区间的右端加1
que.push((NODE){a[j].l,a[j].r,a[j].id});
j++;
}
ans[q[i].id]=sum(q[i].r);
// 第一个while()已经排除了位置在查询区间左端外的那些数
// 即此时sum(q[i].l-1)必等于0 所以不需要减去它
// 直接取查询区间右端的前缀和就可以了
}
for(int i=;i<=m;i++)
printf("%d\n",ans[i]);
} return ;
}

哈理工赛 H-小乐乐学数学 /// 筛法得素数表+树状数组的更多相关文章

  1. E - 卿学姐与城堡的墙(树状数组求逆序数)

    卿学姐与城堡的墙 Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  ...

  2. 2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)

    A------------------------------------------------------------------------------------ 题目链接:http://20 ...

  3. 2019南京网赛 The beautiful values of the palace(思维,树状数组

    https://nanti.jisuanke.com/t/41298 题意:给一个n * n的螺旋矩阵,n保证是奇数,取一些点使其.获得价值,价值为数位和,然后再给q次查询,求矩阵中的价值总和 思路: ...

  4. [BZOJ5125]小Q的书架(决策单调性+分治DP+树状数组)

    显然有决策单调性,但由于逆序对不容易计算,考虑分治DP. solve(k,x,y,l,r)表示当前需要选k段,待更新的位置为[l,r],这些位置的可能决策点区间为[x,y].暴力计算出(l+r)/2的 ...

  5. 求序列A中每个数的左边比它小的数的个数(树状数组)

    给定一个有N个正整数的序列A(N<=10^5,A[i]<=10^5),对序列中的每一个数,求出序列中它左边比它小的数的个数. 思路:树状数组的经典应用(裸题) #include <i ...

  6. 2018牛客网暑假ACM多校训练赛(第五场)H subseq 树状数组

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round5-H.html 题目传送门 - https://www.no ...

  7. 19市赛 树状数组 第k个小的糖果

    int find_kth(int k) { , cnt = , i; ; i >= ; i--)/ { ans += ( << i); if (ans >= maxn|| cn ...

  8. 牛客小白月赛12 F 华华开始学信息学 (分块+树状数组)

    链接:https://ac.nowcoder.com/acm/contest/392/F来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536K ...

  9. 计蒜客 41391.query-二维偏序+树状数组(预处理出来满足情况的gcd) (The Preliminary Contest for ICPC Asia Xuzhou 2019 I.) 2019年徐州网络赛)

    query Given a permutation pp of length nn, you are asked to answer mm queries, each query can be rep ...

随机推荐

  1. (转)Vmware vSphere 5.0系列教程 vSphere网络原理及vSwitch简介 及一个host两个网卡说明

    转:http://andygao.blog.51cto.com/323260/817518/ 在一个物理网络拓扑中,通常都是路由器-交换机-PC机的连接,不同的服务器和PC机,通过交换机的连接而相互连 ...

  2. ajax请求是的动画实现

    ajax请求是的动画实现 ajax是基于XMLHttpRequest对象封装,ajax的具体属性就有: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type S ...

  3. python url编码与解码

    上代码 #codeing:utf-8 from urllib import parse ori_url_10='http://192.168.0.10:3080/asg/portal.do?call= ...

  4. Mysql中设置默认时间为系统当前时间

    Mysql中设置默认时间为系统当前时间 数据库设计时会遇到的一种情况:将系统当前时间设成默认值存储 数据库设计编码: CREATE TABLE `test` ( `name` varchar(50) ...

  5. ajaxFileUpload.js插件支持多文件上传的方法

    前提条件:ajaxFileUpload.js插件多文件上传步骤:1.修改源码,(源码只支持单个文件的上传):复制代码 代码如下: //修改前代码------- //var oldElement = j ...

  6. Dubbo面试20问!这些题你都遇到过吗?

    作者:Dean Wang https://deanwang1943.github.io/bugs/2018/10/05/面试/饿了么/dubbo 面试题/ 1.dubbo是什么 dubbo是一个分布式 ...

  7. Python的序列化和反序列化

    序列化是将dict---->str 反序列化是将str---->dict import jsonresult1 = json.dumps({'a': 1, 'b': 2}) #序列化res ...

  8. jmeter-测试webservice接口

    测试webservice接口(soap类型接口) 一.webservice协议的本质 一个经过封装的post类型的HTTP请求 Web service一般就是用SOAP协议通过HTTP来调用它,其实他 ...

  9. Center OS 7 Apache安装配置

    感谢:https://blog.csdn.net/u014157384/article/details/79497761 该作者的帮助. 自己购买了国外的服务器,想把我的网页放到服务器,网页是以web ...

  10. VMware1设备与主机共享网络的问题

    问题的提出: 最近需要用到VMware1设备来配置网络,顺便将VMware1设备与主机进行共享网络,这样master就能直接访问网络了,但是原本以为直接在wlan设备上选择网络共享就行了,但是却没法收 ...