CodeForces - 914D.Bash and a Tough Math Puzzle(线段树+gcd)

液晶电视维修必看:TCON逻辑板故障排查全指南(附常见问题解决方案) 本文详细解析了液晶电视TCON逻辑板的工作原理与故障排查方法,涵盖LVDS信号处理、DC-DC电压系统等核心知识。提供从基础测量到高级维修的完整指南,帮助技术人员快速诊断黑屏、竖线等常见故障,并给出预防性维护建议,提升维修效率与成功率。 阅读详情

题目

n(n<=5e5)个数,第i个数ai(1<=ai<=1e9)

q(q<=4e5)个操作,操作分两种

1 l r x 询问能否最多更改一个数 使得[l,r]的gcd为x

2 i y 把ai改成y

思路来源

https://blog.youkuaiyun.com/xiaolonggezte/article/details/79118953

题解

注意到gcd可以通过区间查询分为 能整除x的段 和不能整除x的点

那么,不能整除x的点是一定要改的,改成x即可

整段的gcd都能被x整除(比如说[l,r]的gcd当前为2x),我们只需把其中一个改成x即可

最多两次递归到底层寻找gcd不为x的值,复杂度也就相当于每次查了一个区间+两个单点,

 

gcd大概是有flow control的感觉,有短板效应

试想左边一段gcd1%x==0,中间一个x,右边一段gcd2%x==0,

那么完整这一段的gcd就是x,取三者的gcd

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=5e5+5;
int n,q,a[maxn];
int op,l,r,pos,x;
int dat[5*maxn];
int cnt;//最小改动次数 也就是不能整除x的值有多少个 
//gcd可以通过区间查询分为 能整除x的段 和不能整除x的点
//统计所有不能整除x的点 的个数 
int gcd(int a,int b)
{
	return b?gcd(b,a%b):a;
}
void pushup(int p)
{
    dat[p]=gcd(dat[p<<1],dat[p<<1|1]);
}
void build(int p,int l,int r)
{
    if(l==r)
    {
        dat[p]=a[l];
        return;
    }
    int mid=(l+r)/2;
    build(p<<1,l,mid);
    build(p<<1|1,mid+1,r);
    pushup(p);
}
void update(int p,int l,int r,int pos,int v)
{
    if(l==r)
    {
        dat[p]=v;
        return;
    }
    int mid=(l+r)/2;
    if(pos<=mid)update(p<<1,l,mid,pos,v);
    else update(p<<1|1,mid+1,r,pos,v);
    pushup(p); 
} 
void cal(int p,int l,int r)
{
	if(cnt>1)return;//有效降复杂度 剪枝 
	if(l==r)
	{
		if(dat[p]%x)cnt++;
		return;
	}
	int mid=(l+r)/2;
	if(dat[p<<1]%x)cal(p<<1,l,mid);
	if(dat[p<<1|1]%x)cal(p<<1|1,mid+1,r); 
}
void ask(int p,int l,int r,int ql,int qr,int x)
{
	if(cnt>1)return;
	if(ql<=l&&r<=qr)//在完整包含区间的基础上 递归到底 
	{
		if(dat[p]%x)cal(p,l,r);//虽然该操作会使线段树退化
		//但最多搜到两个底就不搜了 而且dat[p]%x说明一定至少有一个
		//所以复杂度 最多*2 
		return; 
	}
	int mid=(l+r)/2;
	if(ql<=mid)ask(p<<1,l,mid,ql,qr,x);
	if(qr>mid)ask(p<<1|1,mid+1,r,ql,qr,x);
} 
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    scanf("%d",&a[i]);
    build(1,1,n);
    scanf("%d",&q);
    for(int i=1;i<=q;++i)
    {
    	scanf("%d",&op);
    	if(op==1)
    	{
    		scanf("%d%d%d",&l,&r,&x);
    		cnt=0;
			ask(1,1,n,l,r,x);
			puts(cnt<=1?"YES":"NO");
    	}
    	else
    	{
    		scanf("%d%d",&pos,&x);
    		update(1,1,n,pos,x);
    	}
    }
    return 0;
}

 

ANSYS——模态分析的理论基础 ANSYS模态分析理论基础 阅读详情

相关推荐

破解拼多多网页字体加密的Python实现(静态)

爬取或者复制粘贴出来发现数字不是6372,而是这样的一个东西 ""从上图我们可以看出数字是一行的空白,后面被浏览器渲染后才展现的数字。我们可以用这个代码查看十六位进制对应的十进制,为什么要看十进制呢?​,而字体文件中的字符映射关系(cmap)也是以十进制存储的。我们搜索这个属性我们可以看到第一个这样的属性有一个URL,这个就是解密的字体包。然后我们构造一个这样的映射字典 key就是对应的十进制,后面的值就是对应的数字。然后我们需要封装一个函数,将加密文字和映射字典传入,返回解密后的数字。

weixin_64179111的博客 3539

Bash and a Tough Math Puzzle CodeForces 914D 线段树+gcd数论

Bash and a Tough Math Puzzle CodeForces 914D 线段树+gcd数论 题意 给你一段数,然后小明去猜某一区间内的gcd,这里不一定是准确值,如果在这个区间内改变一个数的值(注意不是真的改变),使得这个区间的gcd是小明所猜的数也算小明猜对。另一种操作就是真的修改某一点的值。 解题思路 这里我们使用线段树,维护区间内的gcd,判断的时候需要判断这个区...

weixin_30715523的博客 181

概率论 知识图谱 + 实战案例解析

本文通过构建概率论知识图谱,系统梳理了从随机试验、概率、条件概率到随机变量与分布的核心概念及其内在联系。结合朴素贝叶斯分类器和蒙特卡洛模拟等实战案例,深入解析了条件概率、独立性及大数定律等理论如何应用于机器学习与实际问题求解,旨在帮助读者建立结构化思维,将理论有效转化为解决实际问题的能力。

weixin_29051193的博客 267

Codeforces914D Bash and a Tough Math Puzzle 线段树维护gcd

题意:给你一个序列,有两个操作:1、把某个数改为另一个数。2、询问你某一区间内的所有数,能否只修改其中一个数(但不用修改),使得该区间所有数的最大公约数gcd为k,k在每次询问时给出。 思路:单点修改不必说,对于询问:若只修改一个数使得序列符合要求,那么我们需要找有多少数不符合要求,那怎样才算符合要求呢? 我这样说: 若询问的区间的最大公约数是k的倍数(即gcd%k==0),那么所有的数(都是k的...

枚举星星 297

深入解析SSD报错“READ FPDMA QUEUED”:从诊断到修复全流程

本文深入解析了SSD报错“READ FPDMA QUEUED”的含义、成因与全流程解决方案。该错误通常指示硬盘硬件或健康状态问题。文章详细介绍了如何通过系统日志定位错误、解读关键的S.M.A.R.T.健康报告(重点关注重分配扇区计数等指标),并逐步进行硬件排查(如更换SATA数据线)、软件修复与数据抢救,最终指导用户根据诊断结果做出维修或更换SSD的决策。

weixin_29233333的博客 398

TwinCAT3 Modbus-TCP Client/Server使用

/起始地址是12289//起始地址是12294。

panjinliang066333的博客 7733

Bash and a Tough Math Puzzle CodeForces - 914D+线段树+维护区间gcd

题目链接: Bash and a Tough Math Puzzle CodeForces - 914D 注意这里所给x是满足要求的,比如,20,30,gcd==5,不会给x==10; 题目大意:给定一段区间的数值,执行下面两个操作: 1,查询区间[le,re]的最大公约数是不是x,且对于这个区间可以“假性”修改至多一个位置的值,使得区间[le,re]的gcd是x; 2,修改le处的值为x(简单...

地衣的博客——qdu 204

AMG8833红外测温实战:在STM32F103上做个简易人体感应与温度报警器

本文详细介绍了如何在STM32F103上使用AMG8833红外测温传感器构建人体感应与温度报警系统。通过硬件连接方案、驱动代码开发、人体检测算法实现及报警系统设计,展示了如何利用8x8红外温度矩阵实现智能监测功能。文章包含实用的初始化流程、温度数据读取优化和低功耗策略,为创客项目提供完整解决方案。

weixin_33725239的博客 393

codeforces 914 D. Bash and a Tough Math Puzzle(线段树 区间gcd)

http://codeforces.com/problemset/problem/914/D 题意:给出一个数组,现有两种操作 1.给出l,r,x 询问在l,r区间内至多改变一个数,gcd能否为x 2.单点修改元素值 思路:考虑线段树维护,最麻烦的是改变一个元素后gcd能否为x,首先线段树维护每个区间的gcd,首先父节点储存的gcd如果能都整除x,那么该区间gcd就可以在改变一个数的情况下为x ...

- 回忆゛ 211

中国裁判文书网案例批量爬取

本文介绍了某法院网站数据采集的技术研究过程,主要包含JS逆向分析和数据解密方法。通过开发者工具分析发现页面数据经过加密处理,重点研究了ciphertext等加密参数的生成逻辑。文章详细记录了定位加密函数、扣取加密代码、解密数据处理的全流程,并验证了解密方法的有效性。研究过程中强调了技术使用的法律边界,明确声明仅用于合法技术研究,禁止任何非法数据爬取行为。最终实现了加密数据的成功解密,并解释了各请求参数的作用,为后续数据清洗和存储奠定了基础。

2303_80825459的博客 816

机器学习实战——疫情数据分析与预测

机器学习如何做到疫情可视化——疫情数据分析与预测实战 本文将带领大家爬取11个国家以及中国31个省(自治区、直辖市)在2022.0101-2022.06.19的新冠疫情数据。并且采用机器学习模型对2022.6.20-2022.6.30每一天的全国确诊人数、死亡人数、治愈人数进行预测,**做出疫情可视化图形并且求出最终的相关系数R2!...

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 10万+

【Codeforces 914 D Bash and a Tough Math Puzzle】线段树 x 和 y区间内的数gcd在修改次数小于等于1的时候能否为v

CF 914 D 题意 给你n个数 两个操作 2操作 单点修改 1操作 x y v 问你x 和 y区间内的数gcd在修改次数小于等于1的时候能否为v 我们先维护一个区间gcd 然后去很骚的查询即可 查询大抵就是剪枝的思想 我找到如果一个区间%v==0 那么我就不用查下去了 否则到根如果gcd%v!=0 那么我就需要更改一次 这是这个思路写的代码 /* if you can't see th...

我是谁 --- 卡比兽 142

11、CUDA 内存优化:平铺矩阵乘法技术解析

本文深入解析了CUDA中的平铺矩阵乘法技术,重点介绍了如何利用共享内存和线程协作减少全局内存访问,提升计算效率。通过矩阵乘法实例,详细阐述了平铺算法的执行流程、内核代码实现及性能优化策略,包括平铺大小选择、线程同步机制和代码优化建议。文章还分析了该技术在深度学习、图像处理和科学计算等领域的应用价值,为CUDA程序的内存优化提供了系统性指导。

peace的博客 70

codeforces-914D Bash and a Tough Math Puzzle(线段树维护gcd)

链接:http://codeforces.com/problemset/problem/914/D题意:给定一个序列,给出两种操作1 l r x表示判断l到r区间内能否通过改变一个数字使得该区间的gcd=x,2 i y把第i个数改为y题解:通过这道题才知道gcd也是有区间性质的,那么就是一道普通的单点修改加区间查询了。可以通过判断递归到叶子判断该数能否整除x,不能的话返回1进行累加,要注意的是当一...

GrimCake的博客 295

android 蓝牙通讯demo

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

WINCC7.3破解文件

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

Bash and a Tough Math Puzzle 【CodeForces - 914D】【线段树】

题目链接 有两种操作: 1、询问[l, r]区间内改变一个数,是否可以将它的gcd()的值变成x; 2、将i位置上的值改变成y。 然后怎么去处理gcd(),因为可以改变一个,那么线段树去查询这个区间最少要改变的数的个数不就可以了。 #include &lt;iostream&gt; #include &lt;cstdio&gt; #include &lt;cmath&gt; #...

既然弱小,就只顾变强就是了 308

蓝牙模块HM-10手册

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

CodeForces914 D.Bash and a Tough Math Puzzle(线段树)

题意: 给长度为n的序列, 有q次操作: 操作有两种: 1.(1,x,y)把a[x]改成y 2.(2,l,r,x)询问区间[l,r]能否通过修改一个数(改成任意数)使得区间gcd为x(不用真的修改) 思路: 单点修改和区间gcd可以用线段树轻松解决,难点主要是询问。 1.如果区间gcd是x的倍数,则把任意数修改为x都满足条件 2.如果区间内只有一个数不是x的倍数,则把这个数改成x后满足条件 3.如...

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 277

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Bash and a Tough Math Puzzle CodeForces - 914D(线段树+思维)

题目链接 思路描述出处: 题意: 给出一段序列,两个操作 操作1 : 给出l,r,x 求区间l-r的gcd,如果至多能改掉区间内的一个数(不影响原序列),使gcd是x的倍数,那么输出YES,否则输出NO 操作2 : 给出pos,x 将序列中pos位置上的数字改为x 思路:首先GCD是具有传递性的,所以可以使用线段树进行维护,但比较麻烦的就是可以改掉一个数。可以试想一下,对于每个区间的查询,我们最终得到的是若干完整返回块的gcd,如果其中有两个块gcd都不是x的倍数,那么肯定不对。如果只有一个块不是呢?这个块

Ray.C.L的博客 378

Codeforces914D Bash and a Tough Math Puzzle (思维 线段树)

题目链接: Bash and a Tough Math Puzzle 大致题意 给定一个长度为n的序列, 有两种操作: 1 l r x 询问[l, r]区间, 最多修改1个位置的数字的条件下, 能否使得区间内所有数字的gcd = x. 2 a c 把a位置的数字修改为c. 解题思路 思维 我们先考虑查询操作. 设区间[l, r]gcd的结果为ddd​​​, 如果d是x的倍数, 则我们一定可以至多修改一个位置, 使得d’ = x. 那这又代表着什么? 这代表着, [l, r]每一个位置上的数字都是x的倍数.

Fau的博客 380

CodeForces - 914D - Bash and a Tough Math Puzzle( 线段树 + 思维 )

题目链接:点击进入 题目 题意 n 个数,q 次操作: 1 l r x 猜测区间 [ l , r ] gcd 为 x ,若是区间内在最多修改 ( 虚拟修改 )一个值的情况下可以使区间 gcd 变为 x ,就认为这个猜测是正确的,输出 YES ,否则输出 NO; 2 i y 将 a [ i ] 改为 y ; 思路 区间查询 gcd ,单点修改,基本定型线段树 第一个操作,问的是最多修改一次的前提下,猜测的gcd对不对。 若是区间 gcd 是 x 的倍数,那么一定可以在一次修改内将区间 gcd 变为 x

Cosmic_Tree的博客 399

codeforces 914 D Bash and a Tough Math Puzzle

1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 #include<cstdio> 6 using namespace std; 7 const int N=500100; ...

Aaronliu17008的博客 95

CodeForces - 914D Bash and a Tough Math Puzzle(线段树)

题面 Bash likes playing with arrays. He has an array a1, a2, ... an of n integers. He likes to guess the greatest common divisor (gcd) of different segments of the array. Of course, sometimes the g...

weixin_30375427的博客 175

codeforces 914D. Bash and a Tough Math Puzzle(线段树)

传送门 线段树辣鸡题。 题意简述:给出一个序列,支持修改其中一个数,以及在允许自行修改某个数的情况下询问区间[l,r][l,r][l,r]的gcdgcdgcd是否可能等于一个给定的数。 看完题就感觉是道线段树。 修改操作不谈了。 查询给人的第一感觉有点新奇。 但仔细分析就是sbsbsb操作了。 我们维护一个全局变量cntcntcnt来记录为了达到要求已经修改了几个数,如果cnt&amp;gt;1...

苟为蒟蒻又何妨 420

Codeforces 914D - Bash and a Tough Math Puzzle 【线段树】

Codeforces 914D - Bash and a Tough Math Puzzle 【线段树】 Bash likesplaying with arrays. He has an array a1, a2, ... an of n integers. Helikes to guess the greatest common divisor (gcd) of different segments of thearray. Of course, sometimes the guess is not co

Dust_heart的博客 562

【CF-Round-458:D】Bash and a Tough Math Puzzle(判断是否可以通过修改区间内的一个数使区间gcd=x)

题目地址:https://codeforces.com/contest/914/problem/D 题目: 给出序列,2种操作: 1 l r x: 判断是否可以通过修改[l,r]区间的一个数使该区间gcd=x,可以输出“YES”,否则“NO” 2 i y:把序列中的第i个值修改为y 解题思路: 首先建立区间gcd对应的线段树,对于第二种操纵,从下往上更新即可。 对于第一种操纵,...

Cassie_zkq的博客 275

Codeforces914D Bash and a Tough Math Puzzle

题意:一个长度为n的序列,T个询问,2种询问1 l r x问[l, r]区间内替换一个数能不能使得gcd[l, r] == x,输出yes和no,2 l x序列第l个数替换为x 题解:区间询问,单点需修改,线段树,算出区间有t个数不是x的倍数,t>1输出no #include <bits/stdc++.h> #define maxn 501000 #define IN...

weixin_30663391的博客 126

Codeforces 914D Bash and a Tough Math Puzzle (ZKW线段树)

题目链接 Round #458 (Div. 1 + Div. 2, combined) Problem D 题意 给定一个序列,两种询问:单点修改,询问某个区间能否通过改变最多一个数使得该区间的$gcd$值为$val$。 问题转化为询问某个区间里不是val的倍数的数的个数是否不超过$1$。 用线段树实现即可。 #include <bits/stdc++.h> u...

weixin_30855099的博客 201
上一篇: hdu6534 Chika and Friendly Pairs(树状数组+莫队+离散化)
下一篇: hdu6504 Problem E.Split The Tree(dfs序+树状数组+区间数字种数)
小衣同学
博客等级 码龄9年 1444粉丝 995原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小衣同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值