题目大意:

给定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. 记Selenium HTMLTestRunner 无法生成测试报告的总结

      使用Python ,HTMLTestRunner 生成测试报告时,遇到很奇怪的问题,明明运行的结果,没有任何报错,就是不生成测试报告,纠结好久.google+baidu搜索结果也不满意,最后终于解 ...

  2. HTTP与HTTPS的区别与联系

    HTTP与HTTPS的区别与联系 HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure ...

  3. 1、Appium Desktop介绍

    Appium Desktop是一款适用于Mac,Windows和Linux的开源应用程序,它以美观而灵活的用户界面为您提供Appium自动化服务器的强大功能.它是几个Appium相关工具的组合: Ap ...

  4. SPOJ MAXMATCH - Maximum Self-Matching (FFT)

    题目链接:MAXMATCH - Maximum Self-Matching Description You're given a string s consisting of letters 'a', ...

  5. Codeforces 1191A Tokitsukaze and Enhancement

    题目链接:http://codeforces.com/problemset/problem/1191/A 思路:枚举 16 种情况输出最高的就行. AC代码: #include<bits/std ...

  6. JUC源码分析-集合篇(七)PriorityBlockingQueue

    JUC源码分析-集合篇(七)PriorityBlockingQueue PriorityBlockingQueue 是带优先级的无界阻塞队列,每次出队都返回优先级最高的元素,是二叉树最小堆的实现. P ...

  7. jQuery 1.0 | 选择器 | 事件 | 操作样式 | 操作属性

    使用jQuery: 1,下载jQuery http://jquery.com/download/ 2,引入jQuery文件 3,定义入口函数 <script src="jquery-1 ...

  8. 使ie6/7/8支持css3的方法

    使用PIE.htc让IE6\7\8支持CSS3部分属性 包括圆角,阴影,背景渐变等效果 下载地址 http://css3pie.com/download/ 需要注意几点的是 第一,pie是以相对页面h ...

  9. (数据科学学习手札61)xpath进阶用法

    一.简介 xpath作为对网页.对xml文件进行定位的工具,速度快,语法简洁明了,在网络爬虫解析内容的过程中起到很大的作用,除了xpath的基础用法之外(可参考我之前写的(数据科学学习手札50)基于P ...

  10. 前端 Vue

    0.渐进式 JavaScript 框架 通过对框架的了解与运用程度,来决定其在整个项目中的应用范围,最终可以独立以框架方式完成整个web前端项目 一.Vue介绍 1.什么是Vue 可以独立完成前后端分 ...