题目大意:

给定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. spring AOP (使用AspectJ的注解方式 的aop实现) (6)

    目录 一.在 Spring 中启用 AspectJ 注解支持 二.AspectJ 支持 5 种类型的通知注解: 2.1.使用之前的 计算器接口和实现类 ArithmeticCalculator.jav ...

  2. Java-Class-FC:java.util.Optional

    ylbtech-Java-Class-FC:java.util.Optional 1.返回顶部   2.返回顶部 1.1. import java.util.Optional; 1.2.1. @Api ...

  3. WIN7下怎么安装iis教程

    点击开始→控制面板,然后再点击程序,勿点击卸载程序,否则到不了目标系统界面. 2 然后在程序和功能下面,点击打开和关闭windows功能. 3 进入Windows功能窗口,然后看到internet信息 ...

  4. python_way day15 HTML-DAY2、 回顾HTML-CSS 标签(css强制生效),JS(数据类型,时间处理,作用域)

    python_way day15 HTML-DAY2 html-css回顾 javascript 一.html-css回顾 增加默认值: . 强制生效,就算在上面,被覆盖上了也会生效 解决缩小页面混乱 ...

  5. SpringBoot Controller 中使用多个@RequestBody的正确姿势

    最近遇到Controller中需要多个@RequestBody的情况,但是发现并不支持这种写法, 这样导致 1.单个字符串等包装类型都要写一个对象才可以用@RequestBody接收: 2.多个对象需 ...

  6. springbot项目中使用继承

    package com.example.demo.controller; import com.sun.org.apache.bcel.internal.generic.NEW; import org ...

  7. python--面向对象:类和对象命名空间

    一.一个类可以定义两种属性:静态属性和动态属性 (一)对于不可变数据类型来说,类变量最好用类名操作,也可以用对象操作,但是只能查,不能改,对象改的都只是相当于在自己的命名空间里重新建立了一个 clas ...

  8. createBottomTabNavigator: 怎么在切换tab的时候让页面重新渲染

    1.import withNavigationFocus from react-navigation to your class . 2.hen export your like this : exp ...

  9. AN之数据集

    一.数据集: 首先介绍数据集参数: 英文简称 英文全称 中文全称 单位 换成正常单位 说明1 说明2 Time Time 时间 小时:分钟       Temp Temperature 温度 摄氏度 ...

  10. scala中的闭包

    scala闭包 代码示例: package test.close_pack import scala.collection.mutable.ArrayBuffer /** * AUTHOR Guozy ...