HDU 5381 The sum of gcd 询问区间内所有子区间的GCD和 [暴力法]

HDU 5381 The sum of gcd 询问区间内所有子区间的GCD和 [莫队算法] 预处理+莫队,需要抓住 gcd 的本质。 阅读详情

题意:给出N个数,M个询问,对于每个询问,有一组[L,R],输出这个区间内所有子区间的GCD和。

范围:T<=3,N,M<=10000

解法:离线处理+暴力,从右至左,处理出加入一个新数a[pos]时,以pos为左端点时,R作为右端点时的gcd,R∈[pos,N],这些GCD记为b[pos,R],可知每个数最多改变logN次,所以求解出所有阶段的b[]只需要nlogn的复杂度。对于每个询问,即是B[L,R]+B[L+1,R]....+B[R,R],最坏情况下是O(N),M个询问,复杂度为O(N*M)


正解应该是莫队,有待学习,此方法900ms卡过。

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<iostream>
#include<stdlib.h>
#include<set>
#include<map>
#include<queue>
#include<vector>
#include<bitset>
#pragma comment(linker, "/STACK:1024000000,1024000000")
template <class T>
bool scanff(T &ret){ //Faster Input
    char c; int sgn; T bit=0.1;
    if(c=getchar(),c==EOF) return 0;
    while(c!='-'&&c!='.'&&(c<'0'||c>'9')) c=getchar();
    sgn=(c=='-')?-1:1;
    ret=(c=='-')?0:(c-'0');
    while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');
    if(c==' '||c=='\n'){ ret*=sgn; return 1; }
    while(c=getchar(),c>='0'&&c<='9') ret+=(c-'0')*bit,bit/=10;
    ret*=sgn;
    return 1;
}
#define inf 1073741823
#define llinf 4611686018427387903LL
#define PI acos(-1.0)
#define lth (th<<1)
#define rth (th<<1|1)
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define drep(i,a,b) for(int i=a;i>=b;i--)
#define gson(i,root) for(int i=ptx[root];~i;i=ed[i].next)
#define tdata int testnum;scanff(testnum);for(int cas=1;cas<=testnum;cas++)
#define mem(x,val) memset(x,val,sizeof(x))
#define mkp(a,b) make_pair(a,b)
#define findx(x) lower_bound(b+1,b+1+bn,x)-b
#define pb(x) push_back(x)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;

int n,m;
ll c[11111],a[11111],b[11111],d[11111],ans[11111];

struct node{
    int idx,ql,qr;
}ask[11111];
bool cmp(node x,node y){
    return x.ql>y.ql;
}
int gcd(int x,int y){
    if(y==0)return x;
    else return gcd(y,x%y);
}
void change(int pos){
    b[pos]=a[pos];
    int t=b[pos];
    rep(i,pos+1,n){
        t=gcd(t,a[i]);
        if(t==b[i]||b[i]==1){
            b[i]=t;
            break;
        }
        b[i]=t;
    }
}
int main(){
    tdata{
        scanff(n);
        rep(i,1,n)scanff(a[i]),b[i]=0,c[i]=0,d[i]=0;
        scanff(m);
        rep(i,1,m){
            ask[i].idx=i;
            scanff(ask[i].ql);
            scanff(ask[i].qr);
        }
        sort(ask+1,ask+1+m,cmp);
        int k=1;
        drep(i,n,1){
            change(i);
            rep(j,i,n){
                c[j]+=b[j];
                d[j]=d[j-1]+c[j];
            }
            while(ask[k].ql==i&&k<=m){
                ans[ask[k].idx]=d[ask[k].qr];
                k++;
            }
        }
        rep(i,1,m)printf("%lld\n",ans[i]);
    }
    return 0;
}

手眼标定(EyeToHand)推导 Base为基坐标系(B),工具末端坐标系(T),标定板为Mark坐标系(M),相机坐标系(C)对于每两个姿态都存在上式,组成一个AX=XB的矩阵方程,X为。此时转换成AX=0的问题,单纯用SVD求奇异解便可得到。相机坐标系到Base基坐标系下的转换关系。已知标定板与机械臂末端的相对位置固定不变,,即。带入(2)式求,至此求解出需要的手眼矩阵。在眼在手外的时候,其实是要求解。 阅读详情

相关推荐

500多种目标检测数据集下载地址汇总(YOLO、VOC)

【目标检测】红外物体检测-人、自行车、公交、小车、摩托车、骑行者、动物等15000张YOLO+VOC(含部分截取增强图).zip。【目标检测】医用个人防护装备检测数据集981张5类别(口罩、工作服、护目镜、手套、面罩检测数据集)VOC+YOLO格式.zip。【目标检测】车辆分类数据集1880张7类VOC+YOLO(含摩托车、救护车、消防车、警车、警用摩托车、轿车、大车).zip。【目标检测】隐翅虫数据集386张VOC+YOLO【目标检测】隐翅虫数据集386张VOC+YOLO【目标检测】隐翅虫数据集。

2401_85863780的博客 9151

【HDU5726】GCD(区间GCD查询+统计区间gcd为k的区间个数----线段树/st表+思维)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=5726 题目: 给一个数组a,大小为n,接下来有m个询问,每次询问给出l、r,定义f[l,r]=gcd(al,al+1,...,ar),问f[l,r]的值 和 有多少对(l',r')使得f[l',r']=f[l,r]。n<=1e5,m<=1e5,1<=l<=r<=n,1...

Cassie_zkq的博客 1422

[cryoEM] cryoSPARC简介

cryoSPARC系统结构概述 cryoSPARC是一个后端和前端高性能计算软件系统,为单颗粒冷冻电镜提供数据处理和图像分析能力,以及丰富的基于浏览器的用户截面和命令行工具。 Master-worker模式 系统基于主用户模式。 主进程(web应用,核心应用程序和MongoDB数据库)一起在主节点上运行。主节点需要相对轻量级的资源(2+ CPU< 16GB+ RAM)。 工作程序进程可以在具有GPU的任何可用节点上生成,负责所有实际计算和数据处理,并由主节点调度。注意:同一节点可以同时充当主节点和辅

进阶中的程序员吃吃的博客 7796

HDU 5381 The sum of gcd

题意: 有一列数,Q个询问区间,求所有子区间的GCD值之和。 思路:线段树先处理区间左右端点都在同一线段树结点内的情况,再加上各在左右子树的情况,即得到当前结点的所有子区间GCD之和。             需要维护[L,R]区间的所有[L,X]区间和[Y,R]的GCD值,可以发现这些不同的GCD不超过log(ai)个,并且具有递减性质。 #include #include #incl

CSU_ACM Solution Library 429

LIN总线CAPL函数实战——动态控制报文发送(linDeactivateSlot与linActivateSlot)

本文深入解析了LIN总线测试中动态控制报文发送的核心CAPL函数linDeactivateSlot与linActivateSlot的实战应用。通过详细拆解函数参数、生效范围及限制,并结合故障注入、功耗测试等实际场景的代码示例,指导测试工程师在仿真LIN主节点时,灵活调度报文发送,实现高效自动化测试。

weixin_29255731的博客 348

蓝牙耳机充电仓——功能框架

数据传输:大部分充电仓会跟耳机通信,控制耳机开机、关机和进入可搜索模式等等。蓝牙耳机给大家的生活带来便利,来讲讲TWS蓝牙耳机的搭档充电仓吧!方便携带:如果耳机单独带着,指定能弄丢一个,有了充电仓就安全多了。收纳保护:把珍爱的耳机放入充电仓里,防止丢失、磕碰、刮花等。给耳机充电:提供电力补给,让耳机持续使用。

改变自己现在能改变的,珍惜自己现在所拥有的 8948

codeforces1098E Fedya the Potter

题面 题意 给出一个长度为n的序列a,将它的所有子区间的gcd计算出来并存入数组b(长度为n∗(n+1)/2n*(n+1)/2n∗(n+1)/2),并将b区间排序,然后将数组b的所有子区间的和计算出来存入数组c,问数组c的中位数是多少。 做法 首先因为数组a中的所有数都小于等于100000,因此gcd的数字种类也在这个范围内,对数组a可以用倍增求出每个数字作为gcd的次数。 然后考虑二分答案,可以...

yzyyylx的博客 565

Linux 下安装 openjdk 17【详细步骤】

JDK17,安装教程。

甘蓝的专栏 7503

『分治·GCD』区间GCD和

题解 结论:当右端点固定,左端点不固定的区间gcdgcdgcd中,一定有相同的个数不超过log2(n)log2(n)log2(n)段且单调递增的gcdgcdgcd序列。因为nnn分解质因数顶多logloglog个质因子,每次还需要减少不增多,因为上述结论正确。 我们每一次都枚举右端点时,动态维护这一个gcdgcdgcd序列,相同部分用左右端点表示即可。 即: 每一次新加入区间为[i,i][i,i...

Ronaldo7_ZYB的博客 810

基于C++和Qt开发IEC104规约主站调试软件(第二章)

本章节主要讲解iec104主站软件界面设计和从站的连接功能以及部分功能代码的展示。

半青年的博客 858

StarRocks 面试题及参考答案详解(万字详解)

Broker Load的过程通常涉及到数据的解析、转换和加载,它支持多种数据格式,并且可以处理复杂的数据导入任务。一方面,压缩可以减少磁盘I/O操作,因为压缩后的数据占用的空间更小,需要读取的数据块数量也就更少。在StarRocks中,表数据可以被划分成多个分区,每个分区包含表的一部分数据。在传统的行存储模型中,数据是按行组织的,这意味着在执行分析查询时,系统需要读取并处理整行数据,即使很多时候只需要查询其中的少数几列。物化视图的更新可以是完全重算,也可以是增量更新,取决于物化视图的定义和数据变更的模式。

大模型大数据攻城狮的专栏 2082

HDU 5381 The sum of gcd 莫队暴力

链接 题解链接:http://www.cygmasot.com/index.php/2015/08/15/hdu_5381/ 题意: 给定n长的序列 下面n个数给出这个序列 m个询问 下面m行给出询问的区间。 对于一个询问,输出这个区间内的任意子段的gcd 和。 思路: 因为一个数的gcd只会不变或下降,下降一次至少减半,下降至多32次,所以处理出每个数连续相同的gcd的区间。 然后暴力跑莫队。 #pragma comment(linker, "/STACK:1

九野的博客 2636

倍福EL6002做RS232通信获取称重数据..

本文介绍EL6002模块通过RS232自由口通信协议获取从站数据。具体数据对照说明手册即可。

weixin_41883890的博客 1011

HDU - 5381 The sum of gcd(莫队/线段树区间合并)

题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,再给出 mmm 次询问,每次询问需要回答区间 [L,R][L,R][L,R] 内所有子区间的 gcdgcdgcd 之和。更具体的,对于询问 [L,R][L,R][L,R],输出 ∑l=LR∑r=lRgcd⁡{al,al+1,⋯ ,ar}\sum\limits_{l=L}^{R}\sum\limits_{r=l}^{R}\gcd\{a_l,a_{l+1},\cdots,a_r\}l=L∑R​r=l∑R​gcd{al​,al+1​,⋯,ar​} 题目

Falcon的博客 480

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

HDU - 5381 The sum of gcd 莫队

HDU - 5381 首先我们可以观察出从一个点开始的连续gcd最多只有log个, 因为gcd每次最少除2, 然后我们暴力莫队转移就好啦。 #include<bits/stdc++.h> #define LL long long #define LD long double #define ull unsigned long long #define fi...

131

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Hdu5381 the sum of gcd(莫队)

题目大意:q此询问,每次询问[l,r]的所有子区间的gcd之和 思路:莫队,暴力 为什么能暴力,因为1e9范围内的gcd势能有限,对于一个数,最多有32个不同的gcd,因为gcd最小每次减少gcd/2 考虑左右指针移动对答案的贡献 [l,r] -> [l-1,r]则增加了l-1对[l,r]的贡献 [l,r] -> [l+1,r]则减少了l对[l,r]的贡献 [l,r] -> [l,r-1]则减少了r对[l,r]的贡献 [l,r] -> [l,r+1]则增加了r对[l,r]的贡献 接下

m0_53688600的博客 195

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

2015 Multi-University Training Contest 8 (hdu5381 The sum of gcd)

Problem Description   Input There are multiple test cases. The first line of input contains an integer T, indicating the number of test cases. For each test case: First line has one integers n Se...

snayf的博客 227

hdu5381 ST+二分+莫队

//题意:多个区间询问,问区间[l,r] 的所有子区间的gcd和 //思路: //1e4 考虑莫队,每次[l,r]转移到[l-1,r]需要加上sum=gcd[l-1,l-1]+gcd[l-1,l]+gcd[l-1,l+1]....+gcd[l-1,r]; //由于gcd特性,gcd[l-1,l-1],gcd[l-1,l],gcd[l-1,l+1]....gcd[l-1,r]是递减的,且值的数...

animalcoder 351

HDU 5381 The sum of gcd (莫队 + 二分 + 区间GCD特性)

/** 题意:.... 思路: 固定一个端点(值为k),那么这个端点属于的所有区间的不同的gcd最多只有logk中,因为gcd 整除 k, 从大到小排序去重后 后一个数至少除以2,所以不同的GCD最多只有logk个,那么找出这个端点往左和往右当GCD为g时能扩展到多远,这个二分即可,区间 的gcd用ST表预处理出来,之后找出关系式后莫队算法就可以了 */ #include&lt;bits/s...

hnust_Derker的博客 327

246. 区间最大公约数

C l r dQ l r对于每个询问,输出一个整数表示答案。

GitHub:https://github.com/myp020301 317

区间最大公约数 - 区间修改、区间查询gcd

C l r dQ l r对于每个询问,输出一个整数表示答案。

a1695574118的博客 419

(多校第一场1004)HDU5726 GCD(区间GCD查询+)

题意:给出n个数,区间为(1,n),查询区间(l,r)的GCD,以及区间(1, n)有多少子区间的GCD等于区间(l,r)的GCD。 做法:使用线段树,或RMQ维护区间GCD,并且要预处理出所有可能出现的GCD值 的区间数量。针对固定左端点,一直向右GCD阶梯状减小的特性,大概有两种做法。 1)对于某一固定起点(以选定左端点L=i为例),从最右端R开始,二分枚举GCD突变位置pos,这一段阶梯的长度就是R-pos+1,定义INTERGCD(L,R)=区间(L,R)的GCD,则GCD值等于 INTERGC

emmmmmm 4386

【hdu5381】维护区间内所有子区间的gcd之和-线段树

【hdu5381】维护区间内所有子区间的gcd之和-线段树 题意:给定n个数,m个询问,每次询问一个区间内所有连续子区间的gcd的和。n,m&lt;=10^5 题解: 这题和之前比赛的一题很像。我们从小到大枚举r,固定右端点枚举左端点,维护的区间最多只有log段。为什么?以为长区间的gcd肯定是短区间gcd的约数,并且要是不同的话至少要/2,最...

qq_25768269的博客 769

HDU5381【莫队算法+区间GCD特性】

前言: 主要最近在刷莫队的题,这题GCD的特性让我对莫队的使用也有了新的想法。给福利:神犇的一套莫队算法题 先撇开题目,光说裸的一个莫队算法,主要的复杂度就是n*sqrt(n)对吧,这里我忽略了一个左端点(增加/删除)或者右端点(增加/删除)的所带来的复杂度, 之前也遇到过卡这里的复杂度,但是是因为简单的long long计算多而造成了复杂度增大,从而转变一下。 回到这道题:给...

weixin_30823683的博客 225
上一篇: HDU 5386 Cover 覆盖染色
下一篇: HDU 5381 The sum of gcd 询问区间内所有子区间的GCD和 [莫队算法]
GrassTreeFlower
博客等级 码龄11年 14粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值