(2)首先成倍数对的数量是nlogn级别的,考虑每一对【xL,xR】(下标的位置,xL < xR)会对那些询问做出贡献,如果qL <= xL && qR >= xR,那么这一对就会对询问【qL,qR】贡献1;现在把它们看成平面上的点,那么对于每一个询问【qL,qR】,就相当于计算这个点右下角有多少个点,这个就可以通过排序+树状数组解决
————————————————
大致就是,我们可以先处理出区间内每一对(i,j)倍数对,然后按i从大到小排序
排序介绍:按i排序,从大到小,再让添加在前,询问在后,例如,我们区间(1,2,4,6)
然后倍数对就有(1 2,1 3 ,1 4,2 4)我们让2 4排前边,这样就可以一个个当成点来使用树状数组,这样保证先询问到就是刚加进去的
#include <bits/stdc++.h>

using namespace std;
typedef long long LL;
const int maxn = 1e5+15;
const int maxm = 2e6+26;
int n,m,a[maxn],pos[maxn];
struct node{ //f标记是倍数对还是询问,id标识询问的编号
int f,l,r,id;
}p[maxm];
bool cmp(node a,node b){
if(a.l == b.l) return a.f < b.f;
return a.l > b.l;
}
inline int lowbit(int x){
return x & (-x);
}
LL tr[maxn],ans[maxn];
void updata(int x,int val){
while(x <= n){tr[x] += val; x += lowbit(x);}
}
LL query(int x){
LL res = 0;
while(x){res += tr[x]; x -= lowbit(x);}
return res;
}
int main(){
scanf("%d %d",&n,&m); int cnt = m;
for(int i = 1;i <= n; ++i) scanf("%d",a+i),pos[a[i]] = i;
for(int i = 0;i < m; ++i) scanf("%d %d",&p[i].l,&p[i].r),p[i].f=1,p[i].id=i;
for(int i = 1;i <= n; ++i){
for(int j = a[i]*2;j <= n; j+=a[i]){
if(pos[a[i]] < pos[j]) p[cnt++] = (node){0,pos[a[i]],pos[j],0};
else p[cnt++] = (node){0,pos[j],pos[a[i]],0};
}
}
sort(p,p+cnt,cmp);
for(int i = 0;i < cnt; ++i){
if(p[i].f == 1) ans[p[i].id] = query(p[i].r);
else updata(p[i].r,1);
}
for(int i = 0;i < m; ++i) cout << ans[i] << '\n';
return 0;
}

【树状数组】2019徐州网络赛 query的更多相关文章

  1. ICPC 2019 徐州网络赛

    ICPC 2019 徐州网络赛 比赛时间:2019.9.7 比赛链接:The Preliminary Contest for ICPC Asia Xuzhou 2019 赛后的经验总结 // 比赛完才 ...

  2. query 2019徐州网络赛(树状数组)

    query \[ Time Limit: 2000 ms \quad Memory Limit: 262144 kB \] 题意 补题才发现比赛的时候读了一个假题意.... 给出长度为 \(n\) 的 ...

  3. 2019徐州网络赛 I.query

    这题挺有意思哈!!!看别人写的博客,感觉瞬间就懂了. 这道题大概题意就是,给一串序列,我们要查找到l-r区间内,满足min(a[ i ],a[ j ]) = gcd(a[ i ],a[ j ]) 其实 ...

  4. HDU 6278 - Just h-index - [莫队算法+树状数组+二分][2018JSCPC江苏省赛C题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6278 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...

  5. 树状数组 LA 4329 亚洲赛北京赛区题

    复习下树状数组 还是蛮有意思的一道题: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&cat ...

  6. 2019 徐州网络赛 G Colorful String 回文树

    题目链接:https://nanti.jisuanke.com/t/41389 The value of a string sss is equal to the number of differen ...

  7. 计蒜客 31451 - Ka Chang - [DFS序+树状数组][2018ICPC沈阳网络预赛J题]

    题目链接:https://nanti.jisuanke.com/t/31451 Given a rooted tree ( the root is node $1$ ) of $N$ nodes. I ...

  8. 2019徐州网络赛 I J M

    I. query 比赛时候没有预处理因子疯狂t,其实预处理出来因子是\(O(nlog(n))\)级别的 每个数和他的因子是一对偏序关系,因此询问转化为(l,r)区间每个数的因子在区间(l,r)的个数 ...

  9. 2019 徐州网络赛 M Longest subsequence t

    对于答案来说,一定是 前 i-1 个字符和 t的前 i 个一样,然后第 i 个字符比 t的 大 \(i\in [1,m]\) 前缀为t,然后长度比t长 对于第一种情况,枚举这个 i ,然后找最小的 p ...

随机推荐

  1. Go语言交叉编译工具gox

    基本介绍 交叉编译是为了在不同平台编译出其他平台的程序,比如在Linux编译出Windows程序,在Windows能编译出Linux程序,32位系统下编译出64位程序,今天介绍的gox就是其中一款交叉 ...

  2. ORA-29861: 域索引标记为 LOADING/FAILED/UNUSABLE

    解决方法:select idx_name,idx_status from ctxsys.ctx_indexes;需要重建同步全文索引:alter index  索引名  rebuild online ...

  3. 8.1 Spark MLlib简介

    一.什么是机器学习 机器学习可以看做是一门人工智能的科学,该领域的主要研究对象是人工智能.机器学习利用数据或以往的经验,以此优化计算机程序的性能标准. 机器学习强调三个关键词:算法.经验.性能 二.基 ...

  4. express搭建后端请求路由,前端进行访问对应的接口 后端解决跨域

    代码在 ==>E:\nodes实战\myserve\testserve 1 express搭建后端请求路由,前端进行访问对应的接口 1) 创建项目目录 express 项目名 -e 然后按照提示 ...

  5. Vue入门(二)

    1.vue3.0安装 cnpm install -g @vue/cli 或者 yarn global add @vue/cli //创建项目 vue create hello-world //运行 n ...

  6. Note | 北航《网络安全》复习笔记

    目录 1. 引言 2. 计算机网络基础 基础知识 考点 3. Internet协议的安全性 基础知识 考点 4. 单钥密码体制 基础知识 考点 5. 双钥密码体制 基础知识 考点 6. 消息认证与杂凑 ...

  7. isinstance和issubclass

    目录 一.isinstance与type 二.issubclass 一.isinstance与type 在游戏项目中,我们会在每个接口验证客户端传过来的参数类型,如果验证不通过,返回给客户端" ...

  8. hibernate的对象/关系映射结果为空,exists查不到值的问题-20190823

    1: hibernate的对象/关系映射 情景:在使用@onetotone/@manytonone时关联结果为空 原因:在使用这个注解的时候,默认的时crossjoin(交叉连接),在进行查询时以及排 ...

  9. Anaconda安装第三方库与pip和conda 添加国内源

    Anaconda安装第三方库 PIP使用命令 Anaconda命令 pip和conda 添加国内源 1:PIP相关命令 卸载 pip uninstall XXX 1.升级pip python -m p ...

  10. 【linux】linux 查看物理CPU个数、核数、逻辑CPU个数

    ①物理cpu数:主板上实际插入的cpu数量,可以数不重复的 physical id 有几个(physical id) cat /proc/cpuinfo| grep "physical id ...