hdu4630 线段树||树状数组离线处理

HDU-4630(离线) 题目链接:HDU-4630 题意:1~n的全排列,多次询问区间内,两个数字gcd的最大值 预处理出一个数字的所有因子,如果一个因子出现两次以上说明可能作为答案。 对询问按照右端点排序。 按位置从小到大枚举,枚举该数字的所有因子,如果之前该因子出现过,则在该因子之前的位置处更新值为该因子。 如果要用线段树维护,那直接做就行。 如果要用树状数组维护,树状数组维护的是具有前缀性质的,[l,r][l,r]... 阅读详情

比赛时候没想到,感觉弱爆了,做了两个月线段树白做了。。。。白做了。。。。


ACcode:

#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const int NS=50050;

struct node{
    int l,r,id;
    bool operator < (const node cmp) const{
        return r<cmp.r;
    }
    void read(int _id)
    {
        scanf("%d%d",&l,&r);
        id=_id;
    }
}que[NS];

struct nodes{
    int maxs,l,r;
};

struct segtree{

    int val[NS];
    int len;
    void build (int n)
    {
        for (int i=0;i<=n;i++)
        val[i]=0;
        len =n;
    }
    void update(int pos,int v)
    {
        for(int i=pos;i<=len;i+=i&(-i))
        {
            val[i]=max(val[i],v);
        }
    }
    int query(int l)
    {
        int ans=0;
        for(int i=l;i>0;i-=i&(-i))
            ans=max(val[i],ans);
        return ans;
    }
}tree;

int n,m;
int a[NS];
int pre[NS];
int ans[NS];

vector<int> dive[NS];
void init()
{
    for(int i=1;i<NS;i++)
    for(int j=i;j<NS;j+=i)
        dive[j].push_back(i);
}
int main()
{
    init();
    int T;
    for (scanf("%d",&T);T;T--)
    {
        scanf("%d",&n);
        for (int i=1;i<=n;i++)
        scanf("%d",&a[i]);
        tree.build(n);
        scanf("%d",&m);
        for(int i=1;i<=m;i++)
        {
            que[i].read(i);
        }
        sort(que+1,que+1+m);
        memset(pre,0,sizeof(pre));
        for(int i=1,k=1;i<=n;i++)
        {
            int x=a[i];
            for(int j=0;j<dive[x].size();j++)
            {
                int v=dive[x][j];
                if(pre[v]!=0)
                tree.update(n-pre[v]+1,v);
                pre[v]=i;
            }
            while (que[k].r==i&&k<=m)
            {
                int l=que[k].l,r=que[k].r;
                ans[que[k].id]=tree.query(n+1-l);
                k++;
            }
        }
        for(int i=1;i<=m;i++)
        printf("%d\n",ans[i]);
    }
    return 0;
}


hdu 离线处理题目集锦 hdu 3874 题意:n 阅读详情

相关推荐

STM32在六轴机械臂实时控制中的选型与分层架构设计

嵌入式实时控制系统中,微控制器的选型直接决定运动控制精度与系统可靠性。其核心在于匹配确定性中断响应、低延迟外设协同与工业协议栈支持等硬性指标。STM32凭借Cortex-M内核的NVIC调度能力、成熟HAL库及CAN FD/高级定时器等专用外设,在机电一体化场景中成为伺服控制中枢的首选。相比ESP32等通用MCU,STM32在硬实时性、EMC认证生态和工业总线兼容性上具备不可替代优势。本文围绕GTB六轴机械臂项目,详解基于STM32F407的硬件抽象层配置、FreeRTOS任务调度、事件队列解耦及闭环控制数

jupi8的博客 755

HDU4630(树状数组,离线)

题意是给你一个1-n的排列,给q个询问,求每个询问区间里面的最大gcd。 先预处理每一个数的因数。然后按照询问的右区间排序,记录到当前询问为止的最左边界,还有某个因子的最右,次右位置,每次这个因子的位置能更新时都用树状数组维护下。 #include using namespace std; #define maxn 51111 vector fac[maxn]; //每个数的因子 int

morejarphone~ 941

TBtools的序列提取步骤

本教程详细介绍了如何使用TBtools软件从原来的FASTA序列中提取特定的DNA序列。

weixin_47509995的博客 1万+

hdu 4630 No Pain No Game

http://acm.hdu.edu.cn/showproblem.php?pid=4630 离散化+树状数组 将数组 *a 从后向前遍历 遍历到 a[x] 的时候 再枚举a[x]的约数 假如 约数 k last[k] 对应到 上一个k出现的位置 那么可被公约数 k 更新的区间是 last[k] --- 最后 把所有a[x]的约数都处理完之后 从 x 到任意 y(y>=x)...

weixin_30681615的博客 129

【智能车学习】电磁循迹中的基本控制算法

今天心血来潮,突然想总结一下电磁车的一些基本算法,也希望可以给新手同学们一点帮助和参考。本篇主要讲述智能车电磁循迹中涉及到的基本算法,包括滤波算法,归一化算法,PID控制等

Carry_qing的博客 6万+

实用电路精讲系列---ACDC开关电源

AC/DC开关电源工作原理及应用解析 AC/DC开关电源通过高频开关技术将交流电转换为稳定直流电,核心流程包括整流滤波、高频开关转换、反馈稳压和隔离保护。典型应用涵盖智能断路器、车载充电机、光伏逆变器等多个领域,采用不同拓扑结构和功率器件满足各场景需求。文章详细分析了基于LT1103的实用电路,包含输入整流、开关稳压、多级滤波等关键模块,并阐述了同步整流和多级滤波对提升效率稳定性的作用。这种电源技术通过高频开关切换+变压器耦合+闭环反馈,实现了高效紧凑的电能转换,在各工业领域具有广泛应用价值。

weixin_40590799的博客 2585

和Leo一起做爱线段树的好孩子之 HDU 4630 No Pain No Game

神仙线段树系列 陈老师的确出的题个个牛皮 首先我们知道如果一个因数在一段区间出现了两次那么这个因数是一个合法的GCD 注意n不是1e5说明可以暴力查找每个因数 然后维护一个当前因数的上一次出现位置 如果出现了那对上一次出现位置来说是合法的 当然这只是左端点 于是对右端点排序 离线处理 #include<iostream>...

dingwufu9301的博客 606

Android 以太网802.1x 配置

802.1X认证网络配置摘要:本文介绍了通过wpa_supplicant.conf文件配置802.1X企业网络认证的两种方法:PEAP-MSCHAPv2方式和TLS方式。PEAP方式需设置SSID、用户名、密码,可选择是否验证CA证书;TLS方式则需要配置客户端证书、私钥及CA证书路径。文件配置完成后需设置权限并重启设备。最后提出如何验证802.1X配置是否生效的问题,但未给出具体验证方法。该配置适用于需要802.1X认证的企业网络环境。

zhaoyufei133的博客 458

HDU 4630 线段树+离线处理

点击打开链接 题意:给一串数字序列,然后问你L到R中的两个数的最大公约数最大,若相等的两个数则是0 思路:又是一道需要离线处理的题目,昨天写的HDU 3333也是一道这样的题目,建议先写3333在写这个会有帮助,那么对于这个序列我的每一次提问L到R那么最大的是多少,我们可以这样考虑,这区间所有的数的因子的个数大于等于2就可以竞争这个最大的提问,然后选出最大的即可,那么对于R来说,R的所有因子上

Dan__ge的博客 1022

GitHub与GitLab中的Fork操作:从个人仓库到团队协作的完整指南

本文详细介绍了GitHub与GitLab中的Fork操作,从个人仓库到团队协作的完整指南。通过Fork操作,开发者可以在权限隔离的环境下自由实验,并通过合并请求机制保证代码质量。文章涵盖了Fork的具体步骤、本地开发环境配置、代码同步方法以及高级协作技巧,帮助团队高效管理代码仓库。

weixin_28829325的博客 306

EtherCAT主站IGH-- 49 -- 搭建xenomai系统及自己的IGH主站

以上就是搭建xenomai系统及自己的IGH主站的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。

常驻客栈的博客--嵌入式EtherCAT 3158

线段树|树状数组+离线处理总结

https://blog.youkuaiyun.com/qq_40831340/article/details/91404694 此题博客进阶版本 Different GCD Subarray Query HDU - 5869 问你这个区间有多少不同GCD GCD 最多也就log个 对于每个数据 我们分别存放 从1到它 可以有什么GCD 之后 就是HH项链了 我们把处理出GCD往里面扔存最后一个 #incl...

蒟蒻的最后的倔强 302

LLaMA-Factory微调教程2:命令行sft微调

本文介绍了如何使用llama-factory项目在本地运行Qwen2-7B大语言模型进行对话。首先通过llamafactory-cli env查看环境配置,然后使用git lfs下载Qwen2-7B模型。创建配置文件qwen2_7b_instruct.yaml,修改模型路径和模板参数。最后通过llamafactory-cli chat命令启动对话服务,加载模型配置文件和tokenizer,完成环境初始化后即可进行交互式对话。

Cachel Wood的博客 8814

2013 多校第三场 hdu 4630 No Pain No Game(线段树)

hdu 4630 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4630 题目大意:1~n,总共个数,任意顺序排列,然后给你m个询问,每个询问有a、b,问你区间a~b的数里面任意两个数最大gcd是多少。 思路:由于它问的是gcd,那么我们可以先枚举约数,即1~n,对于每个约数去画区间,我们要求的是对于每个区间长度要尽可能的小,比如约数是1的区间,那

沉溺的专栏 860

android 蓝牙通讯demo

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

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

HDU 4630 No Pain No Game 树状数组+离线操作

题意:给一串数字,每次查询[L,R]中两个数的gcd的最大值。 解法:容易知道,要使取两个数让gcd最大,这两个数最好是倍数关系,所以处理出每个数的所有倍数,两两间根据倍数关系形成一条线段,值为该数。那么每次查询[L,R]之间两数gcd的最大值即为查询[L,R]中值最大的线段,离线所有的查询数据,然后按右端点坐标从小到大排序,依次往右加入即可。 这里学到了树状数组维护最大值的写法。 代码:

whatbeg 560

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

hdu 4630 No Pain No Game

题目大意,

春天小猪 935

线段树题集

HDU 1166 入门题  HDU 1754 入门题 HDU 1698 入门题 POJ 2777 入门题 POJ 3667 入门题 HDU 3333 线段树+hash。 HDU 3874 线段树+hash。 HDU 4235 线段树+HASH。 HDU 4288 HDU 4521 HDU 3450  HDU 3607 HDU 3016 HDU 154

dimhat的专栏 756

HDU4630-No Pain No Game(离线,线段树)

Problem Description Life is a game,and you lose it,so you suicide. But you can not kill yourself before you solve this problem: Given you a sequence of number a1, a2, ..., an.They are als...

weixin_30315723的博客 112

hdu3874 离线树状数组

询问区间内不同的数的和。 将询问按照r排序,用last记录每个值上次出现的位置,若重复出现,减去原来的加上现在的。 #include #include #include #include #include #include #include #include #include #include #define fi first #define se second #define pii pai

Every day 405

HDU - tag :: Multi-University 大合集

说明:按无序更新,只更(会)水题 4632 题意:求字符串的回文子[序列]个数 区间DP,设\(dp[i][j]\)为\([i,j]\)范围内的回文子序列个数, 由容斥定理可得\(dp[i][j]=dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1]\) 如果\(i\)和\(j\)本身就可以构成回文,那就多增加\(dp[i+1][j-1]+1\)个回文子序列(1代表只含\(i,j\...

weixin_30411997的博客 189

HDU-4630 No Pain No Game 树状数组+离线操作

  题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4630   题意:给一个数列,询问区间[l,r]里两个数最大gcd。   求区间的最大gcd(a,b),就是找一个数是在这个区间所有数的约数中,至少出现两次,而且最大的那个数。那么接下来就比较容易了,从右到左扫描数列,用pre[i]表示约数 i 在当前这个位置往右第一次出现的位置,那么每到一个位...

weixin_30667301的博客 198

hdu 4630 No Pain No Game(线段树离线处理)

题意:给出n个数,每个数的范围是1~n的。n<=50000;然后查询m次,m<=50000,每次查询[l,r]区间内,任意两个数(不能是同一个数)的gcd的最大值。 分析:pre[x]表示因子x从前往后最近出现的位置,考虑位置i时,如果有因子x,则P[x]~i之间即可以有因子x,线段树维护区间最大值。将查询离线,按照右端点排序,一遍扫过去,一边更新,一边求值。也可以从后往前扫。(nt...

常胜将军的博客 254
上一篇: poj2104 划分树
下一篇: hdu3473 划分树
丿Smile灬晨星
博客等级 码龄14年 46粉丝 235原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值