HDU5869 树状数组

hdu 5869 - 树状数组 + 离线 + 离散(扩展) 解题思路:首先这题a[i]值最大1e6所以可以不用考虑离散化,但是为了方便数据扩大我强行再加了一个log(n)复杂度进行数据离散化。所以现在的复杂度应该是nlog(n)*log(n),不离散的话一个log(n)就可以了。vec[i]数组保存保存区间右界为i的所有gcd情况和该gcd最后出现的位置,那么从i位置一直向左扫gcd肯定是会越来越小的或者不变,变小的话最少变小2倍,所以一个前缀gcd个数不... 阅读详情

Problem Description

This is a simple problem. The teacher gives Bob a list of problems about GCD (Greatest Common Divisor). After studying some of them, Bob thinks that GCD is so interesting. One day, he comes up with a new problem about GCD. Easy as it looks, Bob cannot figure it out himself. Now he turns to you for help, and here is the problem:

Given an array a of N positive integers a1,a2,⋯aN−1,aN; a subarray of a is defined as a continuous interval between a1 and aN. In other words, ai,ai+1,⋯,aj−1,aj is a subarray of a, for 1≤i≤j≤N. For a query in the form (L,R), tell the number of different GCDs contributed by all subarrays of the interval [L,R].

Input

There are several tests, process till the end of input.

For each test, the first line consists of two integers N and Q, denoting the length of the array and the number of queries, respectively. N positive integers are listed in the second line, followed by Q lines each containing two integers L,R for a query.

You can assume that

1≤N,Q≤100000 

1≤ai≤1000000

Output

For each query, output the answer in one line.

Sample Input

5 3
1 3 4 6 9
3 5
2 5
1 5

Sample Output

6
6
6

树状数组的题…
思路就是先取所有的gcd一个一个找,大小区间都算
重复的就去重
还得多理解。。

补充:昨天有一些没想明白的地方但是太晚了就没在意…..
之所以不能全部处理完了再输出的原因就是因为
那个qujian 数组在遍历完了更高的区间以后存的下标就会变化
最后gs出来的不是想要的那个值

#include<stdio.h>
#include<iostream>
#include<string>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<memory.h>
#include<vector>
using namespace std;
int q, w;
int di[100020];
int ci[100020];
int qujian[1000200];
int lowb(int x) { return x&(-x); }
int gcd(int a, int b)
{
    if (b == 0) return a;
    return gcd(b, a%b);
}
int gs(int x)//这是得到的值
{
    int s = 0;
    for (int a = x;a > 0;a -= lowb(a))s += ci[a];
    return s;
}
struct p
{
    int zuo, xiabiao;
};
vector<p>xia[100005];
int yuyu[100005];
void gengxin(int dizhi, int zhi){for (int a = dizhi;a <= q;a += lowb(a))ci[a] += zhi;}
int main()
{
    while (cin >> q >> w)
    {
        memset(di, 0, sizeof(di));
        memset(ci, 0, sizeof(ci));
        memset(qujian, 0, sizeof(qujian));
        for (int a = 1;a <= q;a++)scanf("%d", &di[a]),xia[a].clear();
        int qq, ww;
        for (int a = 1;a <= w;a++)
        {
            scanf("%d%d", &qq, &ww);
            xia[ww].push_back({qq,a});
        }
        for (int a = 1;a <= q;a++)
        {
            for (int b = a, x = di[b];b > 0;b--, x = gcd(x, di[b]))
            {
                if (b > qujian[x])
                {
                    if (qujian[x] != 0)gengxin(qujian[x], -1);//这是个判断重复的好办法
                    gengxin(b, 1);//每当碰见了就更新一次
                    qujian[x] = b;
                }
                if (x == 1)break;
            }
            for (int b = 0;b < xia[a].size();b++)yuyu[xia[a][b].xiabiao] = -gs(xia[a][b].zuo-1) + gs(a );
        }
        for (int a = 1;a <= w;a++)printf("%d\n", yuyu[a]);
    }
    return 0;
}
一文读懂Cache一致性原理 本文介绍了为什么需要维护cache一致性、一致性协议的本质和类别,以及如何设计一致性协议。 阅读详情

相关推荐

【推荐算法】召回模型总结

【推荐算法】召回模型总结

m0_48086806的博客 6246

HDU5869 Different GCD Subarray Query 离线查询/区间贡献

那么用维护区间内不同数字的数目的思路解决。

HeartFireY的博客 434

车辆TBOX科普 第7次 TBOX技术深度解析:硬件架构与核心组件详解

摘要: TBOX(车载远程信息处理单元)是智能网联汽车的核心组件,承担数据采集、通信连接与安全交互等关键功能。其硬件架构以主控单元为核心,采用ARM架构处理器(如NXP i.MX系列)实现高效能低功耗处理,搭配DDR4/LPDDR5内存保障性能,eMMC/UFS存储确保数据可靠性。设计中需平衡车规级可靠性(AEC-Q100)、EMC兼容性及成本控制,同时集成通信、定位与安全模块。未来趋势聚焦异构计算、先进制程及功能安全(ASIL-D)与信息安全融合,推动TBOX向边缘计算节点演进。该技术是汽车智能化转型的重

IT深耕十余载,大道之简 863

HDU-5869 树状数组+离线+预处理

思路讲的很详细的博客 预处理求区间[l,r]的gcd,固定r向左 如[1,3]->[3,3]->[2,3]->[1,2,3]这样才保证了求出了所有的区间内所有的gcd import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io...

weixin_45948204的博客 756

(3万字深度解析)Kaggle《房价预测:高级回归技巧》详解复现攻略

在这篇教程式文章中,我们从零开始完成了 Kaggle《房价预测:高级回归技巧》比赛的复现工作,涵盖了数据预处理、特征工程、模型训练、调优、解释和融合的完整流程。深入理解数据:阅读数据描述,结合常识对每个特征作出合理处理(如缺失值填充’None’表示无此设施 、异常值剔除 等)。对目标和偏态特征进行对数变换,使分布更平滑,从而更好满足模型假设并提升准确度。特征工程:我们创造了总面积、总浴室等新特征,整合信息提高模型可学习性。

qq_38334677的博客 1775

常规波束形成——时域波束形成、频域波束形成

本文介绍了波束成形,包括时域波束成形和频域波束成形,并解释了在实现过程可能存在疑惑的相位补偿。

Candy_Editor的博客 3664

HDU 5869 Different GCD Subarray Query (数学gcd+树状数组离线查询)

精彩精彩真精彩!理解了题解的解法之后,本弱鸡不禁大拍大腿,直呼精彩。这题碰到的东西很多都是第一次见,学到了。 1、首先就是查询竟然还能保存下来排序后再查(传说中的离线查询? 2、遍历所有右端点(可能查询中有这个右端点,也可能没有),重心放在处理左端点上,好像右端点是来嵌套一样。 这种查询的方法以前没见过,今天学到了。 具体在这题里: 1、预处理出每个 i 和它前面的数会产生的gc

卡尔 1481

自动批量安装加载cran, bioconductor和github三个平台的所有的R包

自动批量安装加载cran, bioconductor和github三个平台的所有的R包

qq_40073899的博客 561

HDU5869 Different GCD Subarray Query (区间gcd 离线查询 + 线段树/树状数组)

题目链接: Different GCD Subarray Query 大致题意 有一个长度为n的序列, 从1~n编号, 每个位置都有一个元素值. 多次询问, 每次询问[l, r]区间, 在该区间内所有子数组能产生多少种不同的gcd. 解题思路 离线查询 + 树状数组/线段树 首先理解一下题意, 说白了就是每次询问有两层循环, i从l->r, j从i->r, 对于每一个子数组[i, j], 把所有元素求gcd, 放到一个set里. 最后问你set里有多少个元素. (所以读完发现了一个 n3还带lo

Fau的博客 333

【教程4>第6章>第3节】LS信道估计与均衡系统MATLAB仿真实现

1]姬国伟,葛利嘉,龙秀虹.基于LS信道估计的SC-FDE系统性能研究[J].军事通信技术, 2010(1):6.DOI:CNKI:SUN:JSTY.0.2010-01-013.在无线通信中,信号在空间传播时,随着传输距离增加,能量会逐渐扩散,导致信号幅度减小,即发生衰减。第四个图表示的是提取的信道估计值,可以看到,在不插值的前提下,得到的信道估计值基本接近真实的信道h。从第五个图可知,通过信道估计,对接收信号进行了校正和补偿。信道模型,先通过awgn加入噪声,然后乘以hreal,模拟通过信道。

FPGA/MATLAB学习教程/源码/项目合作开发 389

把 SAP 输出稳稳落到 PDF:从 SPAD 前端打印到 ABAP 程序级转换的一套方法

摘要:本文介绍了三种在SAP系统中将报表输出转为PDF文件的方法。路线A通过SPAD配置前端输出设备,结合Windows打印机设置实现用户交互式PDF保存;路线B在SP01事务码中将已有Spool请求另存为PDF,适用于补救导出;路线C通过ABAP程序自动转换Spool为PDF,适合批量处理。文章详细说明了配置步骤,并针对常见问题(如乱码、文件格式错误等)提供了排查思路。三种方案分别适用于不同场景,用户可根据实际需求选择最合适的PDF导出方式。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 222

HDU5869 Different GCD Subarray Query (离线+树状数组)

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5869 题目大意:长度n的序列, m个询问区间[L, R], 问区间内的所有子段(要求连续的子序列)的不同GCD值有多少种. 解题思路:离线+树状数组。固定R,边预处理L边记录答案。 /* ******************************************

blanKey的博客 493

危废焚烧优化控制系统设计与实现:基于数据驱动的控制参数预测

本文提出了一种基于数据驱动的危险废物焚烧过程优化控制方法。系统利用历史运行数据和实时监测数据,通过深度学习模型预测关键控制参数,实现焚烧过程的智能化控制。系统采用Python开发,结合TensorFlow/PyTorch框架,构建了完整的数据采集、预处理、特征工程、模型训练和实时预测闭环系统。该系统能够处理多变量非线性关系,适应工况变化,从历史数据中学习最优控制策略,相比传统PID控制方法具有显著优势。论文详细介绍了系统架构、算法设计和实现细节,为危废焚烧过程的优化控制提供了有效解决方案。

huanghm88的专栏 207

离线记录+树状数组(hdu 5869 统计任意区间的不同gcd值)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=5869 题意:给定一个数组,给出范围[l,r],求在这范围内的不同gcd值得个数(连续下标) 题解:用o(nlogA)计算出gcd值并进行记录,每次固定右值,枚举前一个得出的gcd值,记录左边的坐标和不同gcd值,然后用树状数组维护,具体见注释 代码: #include #include #in

M_GSir的博客 653

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

HDU - 5869 Different GCD Subarray Query 树状数组离线处理

传送门:HDU5869 题意:给出一个长度为n的序列和m次询问,每次询问给出l,r,求[l, r]区间内所有子序列不同gcd的个数。 思路:首先明确对于一个序列a[l...r]的所有以a[l]开头的子序列,所能得到的不同gcd的个数最多有log(a[l])个。那么这个题中我们就可以对于每一个位置,预处理出以该位置为结尾的所有不同gcd的最大左边界(即L至少要到这个位置才能在L~R这个区间中能形

WA是一笔财富 513

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

HDU 5869 (离线+树状数组)

ProblemDifferent GCD Subarray Query 题目大意   给定n个数的序列,有q个询问,每次询问一个区间中所有子区间所形成不同的gcd的数量。 解题分析   由于固定一个数为右端点,所能形成的gcd共有logn,所以可以预处理出每个数为右端点所能形成的gcd,相同gcd取左端点靠右的。   然后将询问离线,按照r从小到大排序。处理gcd重复的方法是...

aekijekzn484879763的博客 271

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

hdu 5869 区间不同GCD个数(树状数组)

Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 221Accepted Submission(s): 58 Problem Description This ...

diaocuiguo2493的博客 239

HDU 5869 树状数组+GCD性质的利用

大连区域赛网络赛 树状数组 gcd的应用 离线处理

qq_21704477的博客 406

hdu 5869 RMQ+二分+离线树状数组

链接:戳这里 Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description This is a simple problem. The teacher give

Cross 547

HDU 5869 Different GCD Subarray Query 离线 树状数组

Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 663    Accepted Submission(s): 230 Problem Description

Brassica_的菜园 770

hdu5869 Different GCD Subarray Query(rmq+树状数组+gcd)

题目链接:点这里!!! 题意: 给你n个数,q个询问,对于每个询问[l,r]问你[l,r]里面所有子集构成多少种不同的gcd?l1 数据范围:n,q 题解: 比赛的时候傻逼了,用莫队去做,结果各种超时。。 赛后看了题解想了一下,发现其实用用树状数组就可以了,傻逼了。。 这道题我们对所有询问按右端点排序,然后离线来处理! 我们发现固定右端点向左gcd,最多有2

Zsss的博客 554

HDU5869树状数组+gcd预处理

比赛的时候知道用树状数组,但有点乱不知道怎么处理。 统计不同的gcd的个数其实就是用树状数组统计区间内不同的数的模板题啊... 复杂度O(nlogn) 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 1e5+10; 4 int n,q,i,j,a[N],l[N],v[N]; ...

weixin_30488313的博客 98

hdu 5869 Different GCD Subarray Query 预处理 + 离线

// hdu 5869 Different GCD Subarray Query 预处理 + 离线 // // 题目链接: // // http://acm.split.hdu.edu.cn/showproblem.php?pid=5869 // // 题目大意: // // 给定数组,求[L,R]段中所有子段的不同gcd的种类 // // 解题思路: // //

TIMELIMITE的专栏 1008

Different GCD Subarray Query HDU - 5869(树状数组,离线)

题目链接:HDU-5869 题意:一组序列,多次询问,询问区间[l,r][l,r][l,r]gcd不同的子区间有多少个。 通过预处理,将问题转化为二维数点问题。 预处理所有以i为右端点的不同gcd的值以及开头位置。 用vector<pair<> > v[maxn]来存,并且其值是非严格递减的,位置是递减的,并且如果一个gcd出现多次只储存靠后位置的。 然后就是套路了,按查询...

cy41的博客 231

HDU 5869 Different GCD Subarray Query (树状数组)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5869题目大意:找出一个区间内子区间一共有多少种不同的GCD解题思路: 预处理出0到r区间内共有多少种不同的GCD(0<=r#include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> #include <cm

仰望星空 501

区间gcd问题 HDU 5869 离线+树状数组

题目大意:长度n的序列, m个询问区间[L, R], 问区间内的所有子段的不同GCD值有多少种. 子段就是表示是要连续的a[] 思路:固定右端点,预处理出所有的gcd,每次都和i-1的gcd比较,然后不断放入gcd即可。 然后就是树状数组的更新,枚举右端点即可。然后我们知道,大区间不如小区间来的实惠,所以我们每次有重复gcd出现的时候,都要把大区间更换成小区间即可 下午脑子有点不清楚。...

weixin_34148340的博客 161
上一篇: ural 1297 康神无敌马拉车
下一篇: HDU1166 用树状数组重做以前线段树做的单点更新
NineFailure
博客等级 码龄11年 22粉丝 317原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值