题意

给定一个序列,多次询问区间\([l,r]\)中满足\(min(a[i],a[j])==gcd(a[i],a[j])\)的数对\((i,j)\)数。

分析

  • 其实就是求区间有倍数关系的数对数。
  • 由于序列是全排列,所有有倍数关系的数对数只有\(nlogn\)个,因此可以暴力求出所有数对,然后对询问离线,转化为二位偏序的问题,使用树状数组解决即可。
  • 树状数组求逆序对其实就是求\(i<j \&\& a[i]>a[j]\)的二维偏序关系,而在这题里求的就是\(l[i]<l[j] \&\& r[i]>r[j]\)的二维偏序关系,其中\(l[i],r[i]\)就是询问,所以将第一维排序,按树状数组求逆序数的方法计算即可。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+50;
int n,m,l,r,c[N],a[N],p[N],ans[N];
struct node{
int o,id,l,r;
bool operator<(const node& rhs)const{
if(r==rhs.r){
if(l==rhs.l){
//注意l和r都相同,询问点要放在后面...
return o<rhs.o;
}else{
return l>rhs.l;
}
}else{
return r<rhs.r;
}
}
};
vector<node> ns;
int lowbit(int x){
return x&(-x);
}
void add(int i,int x){
while(i<=n){
c[i]+=x;
i+=lowbit(i);
}
}
int sum(int i){
int ans=0;
while(i){
ans+=c[i];
i-=lowbit(i);
}
return ans;
}
int main(){
// freopen("in.txt","r",stdin);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
p[a[i]]=i;
}
for(int i=1;i<=n;i++){
for(int j=i+i;j<=n;j+=i){
int a=p[i],b=p[j];
if(a>b){
swap(a,b);
}
ns.push_back({1,0,a,b});
}
}
for(int i=1;i<=m;i++){
scanf("%d%d",&l,&r);
ns.push_back(node{2,i,l,r});
}
sort(ns.begin(),ns.end());
int ad=0;
int siz=ns.size();
for(int i=0;i<siz;i++){
if(ns[i].o==1){
add(ns[i].l,1);
ad++;
}else{
ans[ns[i].id]=ad-sum(ns[i].l-1);
}
}
for(int i=1;i<=m;i++){
printf("%d\n",ans[i]);
}
return 0;
}

2019icpc徐州网络赛_I_query的更多相关文章

  1. 2019ICPC徐州网络赛 A.Who is better?——斐波那契博弈&&扩展中国剩余定理

    题意 有一堆石子,两个顶尖聪明的人玩游戏,先取者可以取走任意多个,但不能全取完,以后每人取的石子数不能超过上个人的两倍.石子的个数是通过模方程组给出的. 题目链接 分析 斐波那契博弈有结论:当且仅当石 ...

  2. 2019icpc徐州网络赛

    A Who is better? 题意 excrt+斐波那契博弈 分析 Java的BigInteger对象默认为null,不能直接比较. 代码 import java.math.BigInteger; ...

  3. 2018 ICPC 徐州网络赛

    2018 ICPC 徐州网络赛 A. Hard to prepare 题目描述:\(n\)个数围成一个环,每个数是\(0\)~\(2^k-1\),相邻两个数的同或值不为零,问方案数. solution ...

  4. 线段树+单调栈+前缀和--2019icpc南昌网络赛I

    线段树+单调栈+前缀和--2019icpc南昌网络赛I Alice has a magic array. She suggests that the value of a interval is eq ...

  5. 计蒜客 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 ...

  6. 2019ICPC南京网络赛A题 The beautiful values of the palace(三维偏序)

    2019ICPC南京网络赛A题 The beautiful values of the palace https://nanti.jisuanke.com/t/41298 Here is a squa ...

  7. ICPC 2019 徐州网络赛

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

  8. [徐州网络赛]Longest subsequence

    [徐州网络赛]Longest subsequence 可以分成两个部分,前面相同,然后下一个字符比对应位置上的大. 枚举这个位置 用序列自动机进行s字符串的下标转移 注意最后一个字符 #include ...

  9. 徐州网络赛B-BE,GE or NE【记忆化搜索】【博弈论】

    In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl named &qu ...

随机推荐

  1. DesignPattern系列__03依赖倒置原则

    依赖倒置原则(Dependence Inversion Priiciple,DIP) 介绍 High level modules should not depend upon low level mo ...

  2. Cocos经典游戏教程之仿皇室战争

    版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...

  3. OpenCV中图像处理

    一.颜色空间转换 1.cv2.cvtColor(input_img,flag) 参数1是要转换的图像 参数2是转换类型  例如:cv2.COLOR_BGR2HSV (RGB->HSV) cv2. ...

  4. egg 自学入门demo分享

    目录 安装 项目 连接数据库 编写model 编写controller 添加路由 2018-08,本文适用于对egg有兴趣想要了解的同学 完整项目代码:https://github.com/NameH ...

  5. python对常见数据类型的遍历

    本文将通过for ... in ...的语法结构,遍历字符串.列表.元组.字典等数据结构. 字符串遍历 >>> a_str = "hello itcast" &g ...

  6. DDOS浅谈

    一.DDOS攻击的来源 任何攻击都不会凭空产生,DDOS也有特定的来源.绝大多数的DDOS攻击都来自于僵尸网络.僵尸网络就是由数量庞大的可联网僵尸主机组成,而僵尸主机可以是任何电子设备(不仅是X86架 ...

  7. JVM类生命周期概述:加载时机与加载过程

    一个.java文件在编译后会形成相应的一个或多个Class文件,这些Class文件中描述了类的各种信息,并且它们最终都需要被加载到虚拟机中才能被运行和使用.事实上,虚拟机把描述类的数据从Class文件 ...

  8. Java学习|HTTP请求头

    https://www.cnblogs.com/honghong87/articles/6941436.html 常见http请求报文头属性      Accept:告诉服务端,客户端接受什么类型的响 ...

  9. 阿里云短信服务(JAVA)

    一,前言 ​ 短信验证码想必大家都不陌生,在很多网站,APP中都有使用到.比如登录,注册,身份校验等场景.不过通常情况下,短信服务都是外包给第三方公司的,接下来向大家分享如何使用阿里的短信服务. 二, ...

  10. 自己实现spring核心功能 三

    前言 前两篇已经基本实现了spring的核心功能,下面讲到的参数绑定是属于springMvc的范畴了.本篇主要将请求到servlet后怎么去做映射和处理.首先来看一看dispatherServlet的 ...