BZOJ 4028: [HEOI2015]公约数数列 【分块 + 前缀GCD】

政府科技管理者如何提升科技成果转化项目进场交易的备案效率?.docx 政府科技管理者如何提升科技成果转化项目进场交易的备案效率? 立即下载

任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=4028

4028: [HEOI2015]公约数数列

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 1177  Solved: 456
[Submit][Status][Discuss]

Description

设计一个数据结构. 给定一个正整数数列 a_0, a_1, ..., a_{n - 1},你需要支持以下两种操作:

1. MODIFY id x: 将 a_{id} 修改为 x.
2. QUERY x: 求最小的整数 p (0 <= p < n),使得 gcd(a_0, a_1, ..., a_p) * XOR(a_0, a_1, ..., a_p) = x. 其中 XOR(a_0, a_1, ..., a_p) 代表 a_0, a_1, ..., a_p 的异或和,gcd表示最大公约数。

Input

 输入数据的第一行包含一个正整数 n.

接下来一行包含 n 个正整数 a_0, a_1, ..., a_{n - 1}.
之后一行包含一个正整数 q,表示询问的个数。
之后 q 行,每行包含一个询问。格式如题目中所述。

Output

对于每个 QUERY 询问,在单独的一行中输出结果。如果不存在这样的 p,输出 no.

Sample Input

10
1353600 5821200 10752000 1670400 3729600 6844320 12544000 117600 59400 640
10
MODIFY 7 20321280
QUERY 162343680
QUERY 1832232960000
MODIFY 0 92160
QUERY 1234567
QUERY 3989856000
QUERY 833018560
MODIFY 3 8600
MODIFY 5 5306112
QUERY 148900352

Sample Output

6
0
no
2
8
8

HINT

 

 对于 100% 的数据,n <= 100000,q <= 10000,a_i <= 10^9 (0 <= i < n),QUERY x 中的 x <= 10^18,MODIFY id x 中的 0 <= id < n,1 <= x <= 10^9.

 

 

解题思路:

暴力出奇迹。

这种蜜汁区间查询的考虑莫队或者分块。

当然这里是分块啦,在线动态更新嘛。

每一块维护的信息有:

①:Xor[ i ] 位置 i 到它所在块的最左端的异或前缀和。

②:Gcd[ i ] 位置 i 到 它所在块的最左端的前缀GCD。

为什么这样维护前缀GCD呢?因为区间 【1~N】 的前缀GCD 肯定是递减的,,而且每次减小最少都是除以2,那么GCD的种类 最多也是logN。

由于前缀GCD是递减的,那么如果 加上一块的数据后GCD不变,那就说明这一块里所有数的前缀GCD都是不变的。

那么暴力寻解的时候我们分两类情况讨论:

一类是加上这块后 GCD不变,那么只要查询这一块里面有没有符合条件的 异或前缀和即可,(这里预处理时 hash 一下,代码用了stl里的set),查询时直接查这一块的 hash 表即可。

一类是加上这一块后GCD改变的,暴力枚举啦 logN 

 

AC code:

 1 #include <bits/stdc++.h>
 2 #define LL long long
 3 using namespace std;
 4 const int MAXN = 1e5+10;
 5 int N, M;
 6 int bl[1001], br[1001], pos[MAXN], block, num;
 7 int Gcd[MAXN], Xor[MAXN];
 8 int a[MAXN];
 9 set<int>S[1001];
10 int gcd(int a, int b) {return b==0?a:gcd(b, a%b);}
11 void build(int t)
12 {
13     S[t].clear();
14     Gcd[bl[t]] = a[bl[t]]; Xor[bl[t]] = a[bl[t]];
15     S[t].insert(Xor[bl[t]]);
16     for(int i = bl[t]+1; i <= br[t]; i++){
17         Gcd[i] = gcd(Gcd[i-1], a[i]);
18         Xor[i] = Xor[i-1]^a[i];
19         S[t].insert(Xor[i]);
20     }
21 }
22 
23 int main()
24 {
25     int id, val;
26     scanf("%d", &N);
27     for(int i = 1; i <= N; i++){
28         scanf("%d", &a[i]);
29     }
30 
31     block = (int)sqrt(N);
32     for(int i = 1; i <= N; i+=block){
33         bl[++num] = i; br[num] = min(N,i+block-1);
34         for(int j = bl[num]; j <= br[num]; j++)
35             pos[j] = num;
36     }
37 
38     for(int i = 1; i <= num; i++) build(i);
39 
40     char com[10];
41     scanf("%d", &M);
42     while(M--){
43         scanf("%s", com);
44         if(com[0] == 'M'){
45             scanf("%d %d", &id, &val);
46             a[++id] = val;
47             build(pos[id]);
48         }
49         else{
50             LL xx = 0;
51             int Lxor = 0, Lgcd = 0;
52             scanf("%lld", &xx);
53             int flag = 0;
54             for(int i = 1; i <= num; i++){
55                 int T = gcd(Lgcd, Gcd[br[i]]);
56                 if(T != Lgcd){
57                     for(int j = bl[i]; j <= br[i]; j++)
58                         if((LL)gcd(Lgcd, Gcd[j])*(LL)(Xor[j]^Lxor) == xx){
59                             flag = j;
60                             break;
61                         }
62                     if(flag) break;
63                 }
64                 else{
65                     if(xx%T == 0 && S[i].count((int)(xx/T)^Lxor)){
66                         for(int j = bl[i]; j <= br[i]; j++){
67                             if((LL)gcd(Lgcd, Gcd[j])*(LL)(Xor[j]^Lxor) == xx){
68                                 flag = j;
69                                 break;
70                             }
71                         }
72                     }
73                     if(flag) break;
74                 }
75                 Lgcd = T; Lxor^=Xor[br[i]];
76             }
77             if(flag == 0) puts("no");
78             else printf("%d\n", flag-1);
79         }
80     }
81     return 0;
82 }

 

山区道路边坡落石隐患检测数据集VOC+YOLO格式241张1类别.md 【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。 立即下载

相关推荐

高空作业栏杆检测数据集VOC+YOLO格式230张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

【原创工具 | OpenCV-CamCalib】一个基于 OpenCV 的自动化相机数据采集和标定程序

一个基于OpenCV的自动化相机数据采集和标定程序。系统内置相机地址默认为 0。

XavierJ的博客 2698

【bzoj4028】【HEOI2015】公约数数列【分块暴力】

传送门http://www.lydsy.com/JudgeOnline/problem.php?id=4028 这题十分神奇…… 一开始我考虑线段树,后来又考虑分块。。 但是我死在了这么一个问题上: 知道每一块的GCD和XOR,那怎么查询? 相当于gcd(之前的GCD,这一块某处的前缀GCD)*(之前的XOR^这一块某处的XOR)=x。。。 然后我就爆炸了- - 据zzh和tdl等大神

ZMOIYNLP的专栏 3154

从光耦隔离到稳定驱动:信捷伺服与STM32的硬件设计陷阱与救赎

本文深入探讨了信捷伺服驱动器与STM32微控制器配合时的硬件设计关键问题,包括光耦隔离电路选型、电源电压选择、拨码开关设置等核心环节。针对伺服驱动器的稳定驱动需求,提供了从电路设计到抗干扰策略的完整解决方案,帮助工程师规避常见陷阱,提升工业控制系统的可靠性。

gold8的专栏 312

USB的24脚和12脚TYPEC引脚定义

USB 是一种接口,用于将设备连接到计算机上。通过该连接,计算机可以向设备发送数据或检索来自设备的数据。USB 为开发者提供了一个标准接口,适用于多种不同类型的应用。借助于系统的设计过程,USB 设备易于连接和使用。本应用笔记会使该过程变得更加简单。以下是本应用笔记中会使用的概念:USB 历史USB 架构USB 物理接口USB 速度USB 电源USB 端点USB 通信协议USB 描述符USB 类设备USB 枚举与配置过程。

易板 1万+

【bzoj4028】[HEOI2015]公约数数列 分块

好难想呀,看的题解。 http://www.cnblogs.com/maijing/p/4765730.html 很明显gcd是非严格递减的,那么我们处理出Gcd[i]表示从i所在块的开头到i的gcd,Xor[i]表示从i所在块开头到i的xor 假设暴力扫描,如果前面的块所取到的前缀gcd为lastgcd,xor为lastxor 若gcd(lastgcd,Gcd[r[i]])==las

Oxer的专栏 1242

滤波器设计实战:Filter Solutions软件从入门到精通

本文是Filter Solutions滤波器设计软件的实战指南,从入门到精通。通过设计一个低通数字滤波器的完整流程,详细讲解了参数设置、FIR/IIR选择、窗函数及逼近函数应用。文章重点介绍了如何利用这款经典工具高效完成滤波器设计、性能权衡,并将设计成果导出至MATLAB等平台进行实际验证与应用,是信号处理工程师提升效率的实用参考。

weixin_29095049的博客 531

BZOJ4028 [HEOI2015]公约数数列

Description 设计一个数据结构. 给定一个正整数数列 a_0, a_1, ..., a_{n - 1},你需要支持以下两种操作: 1. MODIFY id x: 将 a_{id} 修改为 x. 2. QUERY x: 求最小的整数 p (0 <= p < n),使得 gcd(a_0, a_1, ..., a_p) * XOR(a_0, a_1, ..., ...

dgoh41514的博客 176

TPAMI 2025新作LRFormer复现笔记:我的Windows 11 + RTX 4090配置全流程

本文详细记录了在Windows 11系统下使用RTX 4090显卡复现TPAMI 2025顶会论文LRTransformer的完整流程,包括硬件配置、系统优化、Python环境搭建及模型训练中的常见问题解决方案。特别针对Windows平台特有的路径管理、CUDA版本冲突和显存优化等关键技术细节提供了实用指南,帮助开发者高效完成环境搭建和模型训练。

weixin_29094301的博客 413

表面声波滤波器——叉指换能器设计实战:从关键参数到结构选型

本文深入探讨了表面声波滤波器核心部件叉指换能器的实战设计流程。从目标驱动出发,详细解析了如何根据中心频率确定关键参数指宽,并权衡叉指对数对带宽和插入损耗的影响。文章进一步介绍了通过变迹加权优化频率响应,并对比了梯形结构与纵向耦合谐振滤波器等主流结构选型的适用场景与优缺点,为工程师提供从理论计算到仿真验证的完整设计指南。

weixin_29216353的博客 106

BZOJ4028 [HEOI2015]公约数数列 分块

给定一个数列,要求资磁以下两种操作: 1.单点修改. 2.求数列中最前的位置p,使前缀最大公约数gcd*前缀异或和xor==一个输入的数x.考虑分块+暴力. 按照n√\sqrt n分块,求出每一块的前缀gcd和前缀xor. 单点修改时对所在块暴力更新gcd与xor 每次更新的复杂度是n√logn\sqrt n \log n.查询时分两种情况①如果GCD(gcd_now,gcd_pre)==

Wolf_Reiser的博客 465

高斯-约当(Gauss-Jordan)消元法——c++代码实现

具体算法的详细原理请参照此篇博客:高斯-约当(Gauss-Jordan)消元法下面是具体c++代码,不保证程序最优化,提供一个可行的程序,供大家改进,同时感谢大家提意见。——大神勿喷呀,我是一个小菜鸟~void Guss_Jordan(int n,double *a)//阶数n 系数矩阵a { double*a_temp = new double[n*n * 2];//a与单位矩阵的组合

zwz的学习之路 6874

BZOJ4028: [HEOI2015]公约数数列

BZOJ4028: [HEOI2015]公约数数列 Description 设计一个数据结构. 给定一个正整数数列 a_0, a_1, ..., a_{n - 1},你需要支持以下两种操作: 1. MODIFY id x: 将 a_{id} 修改为 x. 2. QUERY x: 求最小的整数 p (0 <= p < n),使得 gcd(a_0, a_1, ..., a_p)...

weixin_30421525的博客 122

告别臃肿VS!仅用Visual Studio 2022 Build Tools为Qt 5.12.12配置MSVC2017开发环境

本文详细介绍了如何仅使用Visual Studio 2022 Build Tools为Qt 5.12.12配置MSVC2017开发环境,避免安装臃肿的完整VS。通过精准选择组件、配置Qt Creator编译器和优化Kit设置,实现高效、精简的Windows平台Qt开发环境搭建,特别适合追求性能和资源优化的开发者。

weixin_30340617的博客 351

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【BZOJ4028】[HEOI2015]公约数数列 分块

【BZOJ4028】[HEOI2015]公约数数列 Description 设计一个数据结构. 给定一个正整数数列 a_0, a_1, ..., a_{n - 1},你需要支持以下两种操作: 1. MODIFY id x: 将 a_{id} 修改为 x. 2. QUERY x: 求最小的整数 p (0 <= p < n),使得 gcd(a_0, a_1, ..., a_p)...

weixin_30321709的博客 81

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

bzoj 4028 [HEOI2015]公约数数列

首先分块 我们预处理每一块的前缀gcdgcd和前缀xorxor 假设这一块开头为ll,结尾为rr 令g[i]=gcd(a[l],a[l+1],…a[i]),x[i]=xor(a[l],a[l+1],…a[i])g[i]=gcd(a[l],a[l+1],…a[i]), x[i]=xor(a[l],a[l+1],…a[i]) 然后把每一块按x[i]x[i]为第一关键字,下标为第二关键字排序

lcrtest的博客 715

android 蓝牙通讯demo

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

BZOJ 4028: [HEOI2015]公约数数列 分块

4028: [HEOI2015]公约数数列 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4028 Description 设计一个数据结构. 给定一个正整数数列 a_0, a_1, ..., a_{n - 1},你需要支持以下两种操作: MODIFY id x: 将 a_{id} 修改为 x. QUERY x: 求最小的整数 p (...

weixin_33695082的博客 121

bzoj 4028: [HEOI2015]公约数数列 (分块乱搞+map)

题目描述传送门题目大意: 题解将数列分块,对于每个块维护块内的gcd前缀和xor前缀和,并用map维护出每个块内某一权值出现的位置。 所有的修改操作只会影响一个块,时间是n√logn\sqrt n \log n 对于查询操作,考虑到gcd最多变化log次,我们从前向后扫,lastgcd,lastxor表示到上一个块为止的gcd,xor前缀和。如果当前区间的gcd前缀和是lastgcd的倍数,那

clover_hxy的博客 501

【BZOJ4028】[HEOI2015]公约数数列(分块/数量级很小法)

【BZOJ4028】[HEOI2015]公约数数列 https://www.luogu.com.cn/problem/P4108 求解最靠前的一个位置前缀gcd和前缀异或的乘积恰好等于x,并且要求支持单点修改 首先我们可以发现这个问题没法使用线段树维护,因为不仅前缀没有单调性,而且修改也难以处理,所以我们考虑分块。 首先单点修改就变得很简单了,直接对应块暴力重构即可,然后查询的时候利用到一个性质,就是本质不同前缀gcd只有O(logn)种,对于块内gcd会改变的的只有O(logn)块,对于这些块暴力处理,对

xajd1906的博客 167

[HEOI2015] 公约数数列

题目描述: 题目分析: 分块,块内维护 前缀gcd 前缀Xor 修改暴力重构 查询时若gcd(gcd(块尾,pregcd))==pregcd,则说明本块内的所有数都不影响gcd 二分查找符合要求的Xor 否则暴力查询 题目链接: Luogu 4108 BZOJ 4028 Ac 代码: // luogu-judger-enable-o2 #include &lt;cstd...

HT008的Blog 563

[BZOJ4028][HEOI2015]公约数数列(分块)

先发掘性质: 1.xor和gcd均满足交换律与结合率。 2.前缀gcd最多只有O(log)个。 但并没有什么数据结构能同时利用这两个性质,结合Q=10000,考虑分块。 对每块记录这几个信息: 1.块内所有数的gcd与异或和。 2.将块内所有前缀异或和放入一个数组排序。 查询时从前往后遍历每个块: 1.若当前块不使gcd改变,二分查找是否存在答案。 2.若改变,暴力查找...

weixin_30647065的博客 96
上一篇: BZOJ 3744: Gty的妹子序列 【分块 + 树状数组 + 主席树】
下一篇: BZOJ 1878 [SDOI2009]HH的项链 【莫队】
莜莫oO
博客等级 码龄9年 7粉丝 226原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值