【线段树】区间gcd

小黄的刷题之路(十八)——ST表求解区间gcd问题 ST表,稀疏表,求解区间gcd问题,事实上ST表可以求解所有可重复贡献问题 阅读详情

题意

初始有n个数。
有两个操作

  1. L R x 查询[L,R]的gcd是不是x,在查询过程中可以任意篡改一个数(不是真正的修改)
  2. pos x 将pos位置的值修改为x

题解

因为每次可以修改一个数,所以就不能只维护每个区间的gcd,还应该维护该区间不是x倍数的数的个数,如果 >= 2就失败。
这里有个优化就是对于 gcd == x的区别就没必要再查询下去了,因为不存在不是x倍数的区间。

代码

#include <bits/stdc++.h>
using namespace std;
#define FOR0(a,b) for(int i = a; i < b; ++i)
#define FORE(a,b) for(int i = a; i <= b; ++i)
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 5e5+5;
int c[maxn<<2];
int gcd(int a,int b) {return b == 0 ? a : gcd(b,a%b);}
void build(int l, int r, int rt) {
	if(l == r) {
		scanf("%d", &c[rt]);
		return;
	}
	int mid = (l+r)>>1;
	build(lson);
	build(rson);
	// cout << c[rt<<1] <<" " << c[rt<<1|1] << endl;
	c[rt] = gcd(c[rt<<1], c[rt<<1|1]);
}
void update(int L, int v,int l, int r, int rt) {
	if(l == r) {
		c[rt] = v;
		return;
	}
	int mid = (l+r)>>1;
	if(mid >= L) 
		update(L,v,lson);
	if(mid < L) 
		update(L,v,rson);
	c[rt] = gcd(c[rt<<1], c[rt<<1|1]);
}
int query(int L, int R,int x,int l, int r,int rt) {
	if(L > r || R < l) return 0;
	if(l == r) {
		return c[rt]%x != 0;
	}
	// cout << rt << endl;
	int ret = 0;
	int mid = (l+r)>>1;
	if(c[rt<<1]%x) {
		ret += query(L,R,x,lson);
		if(ret > 1) return 2;
	}
	if(c[rt<<1|1]%x) {
		ret += query(L,R,x,rson);
		if(ret > 1) return 2;
	}
	return ret;
}
int main() {
	int n;
	scanf("%d", &n);
	build(1,n,1);
	int q;
	scanf("%d",&q);
	int opt,l,r,v;
	for(int i = 0; i < q; ++i) {
		scanf("%d%d%d", &opt, &l, &r);
		if(opt == 1) {
			scanf("%d", &v);
			if(query(l,r,v,1,n,1)>1) puts("no");
			else puts("yes");
		} else {
			update(l,r,1,n,1);
		}
	}
	return 0;
}
zedboard(5)spi轮询和中断 一个SPI可以有几个从设备 在程序中使用 s32 XSpiPs_SetSlaveSelect(XSpiPs *InstancePtr, u8 SlaveSel) 选择。其实就是吧对应设备的ss拉低。 备注:只选一个ss,可以不用指定。(感觉,还没测试) 这是xspips.c中定义的函数,发送和接收有 XSpiPs_Transfer 和 XSpiPs_PolledTransfer 两个函数,分别采用中断和轮询模式。    一、轮询模式 米联客参考代码,SpiPs_Init中部分和官方例程流程一样,Spi 阅读详情

相关推荐

STM32HAL库学习笔记九——LCD显示

本文不会对驱动编写做特别详细的描述,以记录CubeMX的部署流程为主。

weixin_44762233的博客 6918

线段树区间gcd

小阳的贝壳 题意: 操作 1 l 到 r 的区间加上x 操作2 l到 r 相邻两个差值的绝对值最大 l==r输出0 操作3 l 到 r 的gcd 难点就是是gcd 要想求区间能修改的gcd 你必须要知道一些知识 gcd(a,b)=gcd(a,b-a). gcd(a,b,c)=gcd(a,b-a,c-a) 以此类推 然后只要线段树 维护 相邻两个的差值就可以了 ...

weixin_45676038的博客 1337

保姆级教程:QGC地面站Vehicle Setup全模块配置详解(从固件升级到安全设置)

本文提供QGC地面站Vehicle Setup全模块配置的保姆级教程,涵盖从固件升级到安全设置的完整流程。详细解析二次开发环境准备、传感器校准、飞行模式配置等关键步骤,帮助用户快速掌握无人机配置技巧,确保飞行安全与性能优化。

weixin_28726671的博客 384

线段树求连续区间gcd(区间修改)

因此W[N]可以差分来求一段序列的最大公约数。通过差分使得区间修改,变成单点修改。

xxjjmx的博客 480

mtk-drm commit送显流程(二):内核态atomic_commit实现解析

本文深入解析了mtk-drm框架中atomic_commit机制的内核态实现流程,详细介绍了从用户态触发到硬件提交的完整调用链,包括状态检查、硬件提交等关键阶段。特别分析了MTK平台在动态刷新率、内存带宽优化等方面的特有实现策略,为开发者提供了调试技巧和常见问题解决方案。

weixin_30839881的博客 1305

Android16 rk3576添加触摸点数上限到40个点

本文介绍了在Android 16系统上实现40点触摸支持的修改方案。相比Android 15,Android 16对API添加有更严格的要求,需要在MotionEvent.java中添加@FlaggedApi批注。主要修改包括:1)在input_framework.aconfig中定义flag;2)在MotionEvent.java中添加40个AXIS_GENERIC轴常量并添加批注;3)将32位指针ID处理改为64位适配;4)更新相关API文档。修改涉及多个核心文件,包括PointerController

tzj1058756809的博客 381

gcd的区间性质

gcd具有区间单调性: 对于gcd(l,r),l1<=l<=l2<=r2<=r<=r1,gcd(l2,r2)<=gcd(l,r)<=gcd(l1,r1) gcd具有区间反向包含性质: 对于gcd(l,r),gcd(l1,r1),l<=l1<=r1<=r2,gcd(l,r)一定是gcd(l1,r1)的因子 区间内不同的gcd是有限的...

qq_42897133的博客 1405

中国各城市土地利用类型(城市功能)数据集(shp)

中国各城市土地利用类型(城市功能)数据集时间:2018年全国范围的城市用地类型数据(居住/商业/交通用地等共计11类)分类:居住用地、商业用地、工业用地、医疗设施用地、体育文化设施用地、交通场站用地、绿地等用地类型含城市编码、一级分类5个、二级分类11个1、上海市。

你好,我是小张同学! 1335

小阳的贝壳 线段树 求区间GCD

题目链接 链接:https://ac.nowcoder.com/acm/contest/949/H 来源:牛客网 题目描述 小阳手中一共有 n 个贝壳,每个贝壳都有颜色,且初始第 i 个贝壳的颜色为coli。 现在小阳有 3 种操作: 1 l r x:给 [l,r] 区间里所有贝壳的颜色值加上 x 。 2 l r :询问 [l,r] 区间里所有相邻贝壳 颜色值的差(取绝对值) 的最大值(若 l=r输出0) 3 l r :询问 [l,r] 区间里所有贝壳颜色值的最大公约数。 题目要求3个操作分别是: 维护区间

nefu__lian的博客 584

Plecs电力电子仿真专业教程-第一季 第一节 Plecs简介

Plces 电力电子仿真专业教程系列依托专业的电力电子仿真软件Plecs对各种电力电子常用的拓扑及实际设计的方案进行系统及仿真与软件代码仿真实践。通过对各种电路仿真原理的讲解及专业C语言代码程序的编写,提升学员的系统设计能力,软件编程能力与理论分析能力。

3637

华为OD技术面真题 - JAVA开发 - 1

汇总华为OD技术面八股JAVA八股,高频技术真题并提供详细解答。

qq_45776114的博客 1197

线段树 区间加 gcd 差分

小阳的贝壳 如果线段树要维护区间gcd 这个很简单,但是如果有了区间加,维护gcd 就比较麻烦了。 这个首先可以证明的是 gcd(x,y,z)=gcd(x,y-x,z-y) 这个可以推到 n 个 证明过程传送门 这个就和差分扯上关系了 可以看一下差分 差分传送门 上面的这两个博客基本上告诉我们这两个题目怎么写了。 首先我们对于每一个数进行处理,把这个数变成差分的形式...

weixin_30598225的博客 283

微信小程序爬虫终极指南:以电商小程序抓包与逆向分析为例(最新版)

在2026年的移动互联网生态中,微信小程序已经成为电商交易的核心载体之一。据统计,超过78%的头部电商平台都推出了微信小程序版本,其用户活跃度甚至超过原生App。对于数据从业者而言,小程序端往往藏着比Web端更丰富的接口数据——包括但不限于商品详情、价格波动、用户评价、库存变化、秒杀活动信息等。与传统的Web爬虫不同,微信小程序爬虫面临着三大核心挑战无URL地址栏:无法通过浏览器直接查看网络请求wx.request封装:所有请求均通过微信原生API发起,难以直接拦截然而,

2201_76125261的博客 536

线段树带修改求区间gcd

题目:小Z的加油店 HYSBZ-5028 前置技能: gcdgcdgcd性质: gcd(a1,a2,a3,......,an−2,an−1,an)=gcd(a1,a2−a1,a3−a2,......,an−1−an−2,an−an−1)gcd(a1,a2,a3,......,an−2,an−1,an)=gcd(a1,a2−a1,a3−a2,......,an−1−an−2,an−a...

Zephyr的博客 1737

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

codeforces 914D(线段树区间GCD)

题意:q次询问,每次两个操作,1.问你区间【l,r】内修改一个数字后,区间的gcd是否是X,2.单点修改区间【l,r】的值 题解:线段树处理区间的gcd 如果给定的区间【l,r】 在左子树,就在左子树找 否则在右子树找 在否则需要拆区间,这时再来个查询,查询拆区间后的左右子树的gcd是否能整除X,因为区间gcd一定是最小的内个数 如果拆区间后的左右子树一边能整除则继续往下搜 如果拆区间...

gml1999的博客 441

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

hdu5726 GCD (线段树+区间gcd)

GCD Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1587    Accepted Submission(s): 515 Problem Description Give you a sequence of N(N

滴水穿石,慢慢积累,总会有成果 2883

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

HDU5726 线段树求解区间GCD

GCD Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 5302    Accepted Submission(s): 1908 Problem Description Give you a sequence of N(N≤100...

紫芝的博客 2174

线段树 - Interval GCD(区间最大公约数) - AcWing 246

线段树 - Interval GCD(区间最大公约数) - AcWing 246 给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1、“C l r d”,表示把 A[l],A[l+1],…,A[r] 都加上 d。 2、“Q l r”,表示询问 A[l],A[l+1],…,A[r] 的最大公约数(GCD)。 对于每个询问,输出一个整数表示答案。 输入格式 第一行两个整数N,M。 第二行N个整数A[i]。 接下来M行表示M条指令,每条指令的格式如题目描述所示。 输出格式 对于每个询问,输出

njuptACMcxk的博客 1211

时间管理,线段树,区间gcd修改,求和

时间管理 题意比较明显了。关键是维护gcd区间修改。 任老板直播的时候讲了: 在对一段区间做x变换后,下一次操作可能对区间内的数没有实质性的改变,比如如果区间内的数 全部变成1,无论什么数进行修改区间,区间的值不发生变化。具体怎么操作,维护了区间最大值和最小值,如果区间最大值=最小值=gcd(修改的值,最大值)那么说明本次修改对区间没有贡献,可以直接返回。然后指出这个算法不足之处比如对于2424242424242 这样的区间修改值=8虽然对区间没有贡献,但是最大值不等于最小值,所以依然要递归到叶子节点才

backordinary的博客 559

线段树--区间最大gcd问题

AcWing 246. 区间最大公约数 给定一个长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一: C l r d,表示把 A[l],A[l+1],…,A[r] 都加上 d。 Q l r,表示询问 A[l],A[l+1],…,A[r] 的最大公约数(GCD)。 对于每个询问,输出一个整数表示答案。 输入格式 第一行两个整数 N,M。 第二行 N 个整数 A[i]。 接下来 M 行表示 M 条指令,每条指令的格式如题目描述所示。 输出格式 对于每个询问,输出一个整数表示答案。 每个答案占一

weach的博客 942

Interval GCD(线段树带修改求区间gcd)

D. Interval_GCD 蓝书题目 Interval GCD 题意:给定n个数字Ai,M次操作(N:5e5,M:5e5)操作有两种: C l r d 将A[l,r]加上d Q l r 询问A[l,r]的最大公约数 思路: gcd⁡(a1,a2,a3,a4...,an)=gcd⁡(a1,a2−a1,a3−a2,a4−a3...an−an−1)\gcd(a_1,a_2,a_3,a_4.....

手扶拖拉机如何改装四驱 519

P1890 gcd区间(线段树)

今天模拟赛又爆零了

qq_42723595的博客 305

CH 4302 Intervavl(线段树维护区间gcd,区间加)

传送门 描述 给定一个长度为N的数列A,以及M条指令 (N≤510^5, M<=10^5),每条指令可能是以下两种之一: “C l r d”,表示把 A[l],A[l+1],…,A[r] 都加上 d。 “Q l r”,表示询问 A[l],A[l+1],…,A[r] 的最大公约数(GCD)。 输入格式 第一行两个整数N,M,第二行N个整数Ai...

weixin_30653097的博客 111

牛客小白赛16:H-小阳的贝壳 (线段树维护带区间修改的gcd)

题目链接:https://ac.nowcoder.com/acm/contest/949/H 题目大意: 小阳手中一共有 n 个贝壳,每个贝壳都有颜色,且初始第 i 个贝壳的颜色为 colicoli 。现在小阳有 3 种操作: 1 l r x:给 [l,r][l,r] 区间里所有贝壳的颜色值加上 xx 。 2 l r:询问 [l,r][l,r] 区间里所有相邻贝壳 颜色值的差(取绝对值) 的最...

qq_41997978的博客 287

HDU 5726 GCD (rmq+二分 or 线段树 维护区间gcd)

GCD Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 4325    Accepted Submission(s): 1543 Problem Description Give you a sequence o

K键盘里的青春K 675

【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
上一篇: 【HAOI 2007 覆盖问题】 二分
下一篇: zoj 4097 Rescue the Princess (缩点+LCA)
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值