2019徐州网络赛 I.query
这题挺有意思哈!!!看别人写的博客,感觉瞬间就懂了。
这道题大概题意就是,给一串序列,我们要查找到l-r区间内,满足min(a[ i ],a[ j ]) = gcd(a[ i ],a[ j ])
其实我们把这个东西看成一个二元组,<i,j> 二元组满足 min(a[ i ],a[ j ]) = gcd(a[ i ],a[ j ])
为了保证唯一性,<i,j>二元组满足i<j ,min(a[ i ],a[ j ]) = gcd(a[ i ],a[ j ])
由于是排列,我们可以枚举所有的满足条件的<i,j>,并且保证二元组唯一。
这样我们就转换为一个二维偏序问题。
对于询问<l,r>我们需要回答满足条件的二元组<i,j> 满足 l<=i 且 j<=r 的二元组的组数。
那我们把询问全部离线并加入修改操作,然后排序第一维度的r,保证r的有序,对于r相同的修改和询问,先进行修改
(因为先要生成序列,询问实际上是后面进行的),维护了r后,保证了树状数组里面<i,j> j<=r,然后查询>=l的个数。
查询query(n)-query(l-1)即可,注意如果是l==1的话,避免树状数组超时直接查query(n)。就实现了二维偏序的查询。
#include<bits/stdc++.h>
using namespace std;
const int maxx = 1e6+;
struct node{
int l,r,id;
bool operator < (const node &s) const {
if (r==s.r){
return id<s.id;
}
return r<s.r;
}
}q[*maxx];
int ans[maxx];
int pos[maxx];
int tot,n;
int sum[maxx];
int lowbit(int x){
return x&(-x);
}
void add(int x,int w){
for(int i=x;i<=n;i+=lowbit(i)){
sum[i]+=w;
}
}
int query(int x){
int s=;
for (int i=x;i;i-=lowbit(i)){
s+=sum[i];
}
return s;
}
int main(){
int m;
scanf("%d%d",&n,&m);
tot=;
memset(ans,,sizeof(ans));
memset(pos,,sizeof(pos));
memset(sum,,sizeof(sum));
int tmp;
for (int i=;i<=n;i++){
scanf("%d",&tmp);
pos[tmp]=i;
}
for (int i=;i<=n;i++){
for (int j=;i*j<=n;j++){
q[++tot]=node{min(pos[i],pos[i*j]),max(pos[i],pos[i*j]),};
}
}
int l,r;
for (int i=;i<=m;i++){
scanf("%d%d",&l,&r);
q[++tot]=node{l,r,i};
}
sort(q+,q++tot);
for (int i=;i<=tot;i++){
if (q[i].id==){
add(q[i].l,);
}else {
if (q[i].l==){
ans[q[i].id]=query(n);
}else{
ans[q[i].id]=query(n)-query(q[i].l-);
}
}
}
for (int i=; i<=m; i++)
{
printf("%d\n",ans[i]);
}
return ;
}
2019徐州网络赛 I.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徐州网络赛 query
(2)首先成倍数对的数量是nlogn级别的,考虑每一对[xL,xR](下标的位置,xL < xR)会对那些询问做出贡献,如果qL <= xL && qR >= xR, ...
- 2019徐州网络赛 I J M
I. query 比赛时候没有预处理因子疯狂t,其实预处理出来因子是\(O(nlog(n))\)级别的 每个数和他的因子是一对偏序关系,因此询问转化为(l,r)区间每个数的因子在区间(l,r)的个数 ...
- 2019徐州网络赛 H.function
题意: 先有\(n=p_1^{k_1}p_2^{k_2}\cdots p_m^{k_m}\),定义\(f(n)=k_1+k_2+\cdots+k_m\). 现在计算 \[ \sum_{i=1}^nf( ...
- 2019徐州网络赛H :function (min25筛)
题意:f(i)=i的幂次之和. 求(N+1-i)*f(i)之和. 思路:可以推论得对于一个素数p^k,其贡献是ans=(N+1)[N/(P^k)]+P^k(1+2+3...N/(P^k)); 我们分两 ...
- [2019徐州网络赛J题]Random Access Iterator
题目链接 大致题意:从根节点出发,在节点x有son[x]次等概率进入儿子节点,求到达最深深度的概率.son[x]为x节点的儿子节点个数. 又又又又没做出来,心态崩了. 下来看了官方题解后发觉自己大体思 ...
- 2019 徐州网络赛 center
题意:n个点,求最小加上几个点让所有点关于一个点(不需要是点集里面的点)中心对称 题解:双重循环枚举,把中点记录一下,结果是n-最大的中点 #include <bits/stdc++.h> ...
- 2019 徐州网络赛 G Colorful String 回文树
题目链接:https://nanti.jisuanke.com/t/41389 The value of a string sss is equal to the number of differen ...
随机推荐
- Hystrix线程池配置
Hystrix配置文件配置 断路器: hystrix.command.default.circuitBreaker.requestVolumeThreshold(当在配置时间窗口内达到此数量的失败后, ...
- 2019.10.25 csp-s模拟测试86 反思总结
继续存档 早上来补了一下昨天的题,不过肯定这两天的没法完全补起来 T1: 经典思路:关于位运算的题讨论每一位的贡献 #include<iostream> #include<cstdi ...
- Java中用JXL导出Excel代码详解
jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI.其中功能相对POI比较弱一点.但jExcelAPI对中文支 ...
- Leetcode17.Letter Combinations of a Phone Number电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23" 输出:[&quo ...
- CSS实现火焰效果
代码如下 //主要就是用css动画实现的 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- linux之bc命令
当在脚本中要处理浮点数计算时,就可以使用bc计算器,先看下面的例子 [root@node2 tmp]# cat bc.sh #!/bin/bash # num1=`echo "scale=3 ...
- HDU 1724 自适应辛普森法
//很裸的积分题,直接上模板 #include<stdio.h> #include<math.h> int aa, bb; //函数 double F(double x){ - ...
- 【JZOJ3636】【BOI2012】Mobile(mobile)
Mission 著名的手机网络运营商Totalphone 修建了若干基站收发台,以用于把信号网络覆盖一条新建的高速公路.因为Totalphone 的程序员总是很马虎的,所以,基站的传功功率不能独立设置 ...
- Python之路--协程/IO多路复用
引子: 之前学习过了,线程,进程的概念,知道了在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位.按道理来说我们已经算是把CPU的利用率提高很多了.但是我们知道无论是创建多进程还是创建多 ...
- 两种RBAC权限控制模型详解
序言 由于最近一直卡在权限控制这个坎上,原来设计的比较简单的权限控制思路已经无法满足比较复杂一些的场景,因此一直在探索一种在大部分场景下比较通用的权限模型. 首先,这里说明一下两种RBAC权限模型分别 ...