【树状数组】2019徐州网络赛 query
(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的更多相关文章
- ICPC 2019 徐州网络赛
ICPC 2019 徐州网络赛 比赛时间:2019.9.7 比赛链接:The Preliminary Contest for ICPC Asia Xuzhou 2019 赛后的经验总结 // 比赛完才 ...
- query 2019徐州网络赛(树状数组)
query \[ Time Limit: 2000 ms \quad Memory Limit: 262144 kB \] 题意 补题才发现比赛的时候读了一个假题意.... 给出长度为 \(n\) 的 ...
- 2019徐州网络赛 I.query
这题挺有意思哈!!!看别人写的博客,感觉瞬间就懂了. 这道题大概题意就是,给一串序列,我们要查找到l-r区间内,满足min(a[ i ],a[ j ]) = gcd(a[ i ],a[ j ]) 其实 ...
- 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 ...
- 树状数组 LA 4329 亚洲赛北京赛区题
复习下树状数组 还是蛮有意思的一道题: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&cat ...
- 2019 徐州网络赛 G Colorful String 回文树
题目链接:https://nanti.jisuanke.com/t/41389 The value of a string sss is equal to the number of differen ...
- 计蒜客 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 ...
- 2019徐州网络赛 I J M
I. query 比赛时候没有预处理因子疯狂t,其实预处理出来因子是\(O(nlog(n))\)级别的 每个数和他的因子是一对偏序关系,因此询问转化为(l,r)区间每个数的因子在区间(l,r)的个数 ...
- 2019 徐州网络赛 M Longest subsequence t
对于答案来说,一定是 前 i-1 个字符和 t的前 i 个一样,然后第 i 个字符比 t的 大 \(i\in [1,m]\) 前缀为t,然后长度比t长 对于第一种情况,枚举这个 i ,然后找最小的 p ...
随机推荐
- 010.MongoDB备份恢复
一 MongoDB备份 1.1 备份概述 mongodb数据备份和还原主要分为二种,一种是针对于库的mongodump和mongorestore,一种是针对库中表的mongoexport和mongoi ...
- 失败的一天(找bug)
前天早上来到实验室,准备抓紧时间写写代码,毕竟第二天就是组会了.点了一下鼠标,发现显示屏无法唤醒,然后就准备强制关机再开机(我一般不关机,以前遇到过几次无法唤醒),低头发现主机不亮,然后按了开关也不亮 ...
- 【转】关闭firefox火狐浏览器下载完成时自动扫描(49.0.2以后版本)
用firefox火狐浏览器下载文件到最后时,会显示"剩余时间未知",将持续10秒钟左右,即使几KB 的文件,也要持续这么长时间,问度娘才知道是自动扫描,检查是否有毒,用的却是Goo ...
- (转)vue-router原理
转载地址:https://segmentfault.com/a/1190000014822765 随着前端应用的业务功能起来越复杂,用户对于使用体验的要求越来越高,单面(SPA)成为前端应用的主流形式 ...
- LG1879 「USACO2006NOV」Corn Fields 状压DP
问题描述 LG1879 题解 设\(opt[i][j]\)代表前\(i\)行,且第\(i\)行状态为\(j\)的方案数. 枚举\(j\),再枚举\(k\),\(k\)为上一行的状态. 判断\(j,k\ ...
- 简单App项目的运行
我和我的同伴两个人从网上下载一个仿微信登录源码,导入到eclipse中,两人结队练习这个源代码的操作, 运行项目到Android虚拟器上,显示效果为 我们还运行这个项目到手机设备上,显示效果为 接 ...
- 80%应聘者都不及格的JS面试题
共 5024 字,读完需 6 分钟,速读需 2 分钟,本文首发于知乎专栏前端周刊.写在前面,笔者在做面试官这 2 年多的时间内,面试了数百个前端工程师,惊讶的发现,超过 80% 的候选人对下面这道题的 ...
- 云服务AppId或AppKey和AppSecret生成策略
App key和App Secret App key简称API接口验证序号,是用于验证API接入合法性的.接入哪个网站的API接口,就需要这个网站允许才能够接入,如果简单比喻的话:可以理解成是登陆网站 ...
- Python变量与内存管理
Python变量与内存管理 –与C语言中的变量做对比,更好的理解Python的变量. 变量 变量在C语言中 全局变量:其存放在内存的静态变量区中. 局部变量:代码块中存放在内存的代码区当中,当被调 ...
- 开源的13个Spring Boot 优秀学习项目!超53K星,一网打尽!
Spring Boot 算是目前 Java 领域最火的技术栈了,也是Java开发人员不得不掌握的技术,今天给大家整理了13个优质 Spring Boot 开源项目给大家参考,希望能够帮助到正在学习 S ...