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

STRING数据库的蛋白质相互作用(PPI)网络分析 在转录调控相关的文献中,我们经常能够看到这样的蛋白质相互作用网络(protein protein interaction network,PPI network)。具体而言,这些相关的文献中首先通过RNA-seq、表达谱芯片或者蛋白质组分析等,找到了在不同分组样本间一系列的差异表达基因或蛋白。 阅读详情
题目链接:点击进入
题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题意

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 ;
若是不是 x 的倍数,那么若是除去一个数,剩下的数的 gcd 是 x 的倍数也行。但是这不好统计。那么我们看一下,其实若剩下的数的 gcd 是 x 的倍数,那么就说明剩下的数都是 x 的倍数。
也就是说,区间内最多只有一个数不是 x 的倍数,那这样才能在最多修改一次的前提下,认为猜测的是对的,否则就是错的。
统计区间内有多少个数不是 x 的倍数,可以用线段树解决。
对于每个节点统计对于区间 gcd ,若是 gcd 是 x 的倍数说明对应区间内都是 x 的倍数;
若是不是,说明这个区间内至少有一个不是 x 的倍数,那么继续向下查询,一直到叶子节点,若不是 x 倍数返回 1 即可。
( 如果到这里就结束了,那么你会发现会T )
T 掉了,我们就需要优化。其实我们刚刚提到了一个结论,即一个区间内 gcd 不是 x 的倍数那么说明区间内至少有一个数不是 x 的倍数。那么对于一个节点,我们知道它 gcd 不是 x 的倍数,那么我们可以再看一下他的左右孩子,如果它的左右孩子的 gcd 都不是 x 的倍数,说明这个节点对应区间至少有两个数不是 x 的倍数,>1 就不符合条件了,那我们直接返回 2 即可,若是只有一个孩子 gcd 不是 x 倍数,那么继续在这个孩子节点上向下查询即可,一直到叶子节点,若不是 x 倍数返回 1 即可。
第二个操作单点修改

代码
// Problem: Bash and a Tough Math Puzzle
// Contest: Virtual Judge - CodeForces
// URL: https://vjudge.net/problem/CodeForces-914D
// Memory Limit: 262 MB
// Time Limit: 2500 ms
// 
// Powered by CP Editor (https://cpeditor.org)

//#pragma GCC optimize(3)//O3
//#pragma GCC optimize(2)//O2
#include<iostream>
#include<string>
#include<map>
#include<set>
//#include<unordered_map>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<fstream>
#define X first
#define Y second
#define best 131 
#define INF 0x3f3f3f3f3f3f3f3f
#define pii pair<int,int>
#define lowbit(x) x & -x
#define inf 0x3f3f3f3f
//#define int long long
//#define double long double
//#define rep(i,x,y) for(register int i = x; i <= y;++i)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const double pai=acos(-1.0);
const int maxn=1e6+10;
const int mod=1e9+7;
const double eps=1e-9;
const int N=5e3+10;
/*--------------------------------------------*/
inline int read()
{
    int k = 0, f = 1 ;
    char c = getchar() ;
    while(!isdigit(c)){if(c == '-') f = -1 ;c = getchar() ;}
    while(isdigit(c)) k = (k << 1) + (k << 3) + c - 48 ,c = getchar() ;
    return k * f ;
}
/*--------------------------------------------*/

int n,a[maxn],q;
struct node
{
	int l;
	int r;
	int data;
}t[maxn<<2];

int gcd(int a,int b)
{
	if(!b) return a;
	else return gcd(b,a%b);
}
void pushup(int p)
{
	t[p].data=gcd(t[p<<1].data,t[p<<1|1].data);
}
void build(int p,int l,int r)
{
	t[p].l=l,t[p].r=r;
	if(l==r)
	{
		t[p].data=a[l];
		return ;
	}
	int mid=l+r>>1;
	build(p<<1,l,mid);
	build(p<<1|1,mid+1,r);
	pushup(p);
}
void change(int p,int pos,int x)
{
	if(t[p].l==t[p].r)
	{
		t[p].data=x;
		return ;
	}
	int mid=t[p].l+t[p].r>>1;
	if(pos<=mid) change(p<<1,pos,x);
	else change(p<<1|1,pos,x);
	pushup(p);
}
int ask(int p,int l,int r,int x)
{
	// if(l<=t[p].l&&t[p].r<=r&&(t[p].data%x==0))//注释部分超时
		// return 0;
	// else if(t[p].l==t[p].r)
		// return 1;
	if(l<=t[p].l&&t[p].r<=r)
	{
		if(t[p].data%x==0)
			return 0;
		else if(t[p].l==t[p].r)
			return 1;
		else if((t[p<<1].data%x)&&(t[p<<1|1].data%x))
			return 2;
		else if(t[p<<1].data%x)
			return ask(p<<1,l,r,x);
		else if(t[p<<1|1].data%x)
			return ask(p<<1|1,l,r,x);
	}
	int mid=t[p].l+t[p].r>>1,ans=0;
	if(l<=mid) ans+=ask(p<<1,l,r,x);
	if(r>mid) ans+=ask(p<<1|1,l,r,x);
	return ans;
}

int main() 
{
	// ios::sync_with_stdio(false);
	// cin.tie(0);cout.tie(0);
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	build(1,1,n);
	scanf("%d",&q);
	while(q--)
	{
		int op,x,y,z;
		scanf("%d%d%d",&op,&x,&y);
		if(op==1)
		{
			scanf("%d",&z);
			int sum=ask(1,x,y,z);
			if(sum<=1) printf("YES\n");
			else printf("NO\n");
		}
		else
			change(1,x,y);
	}
    return 0;
} 
YOLOv8改进 | 融合篇,YOLOv8改进主干网络为MobileNetV4+CBAM注意机制+Powerful-IoU损失函数(2024 最新IOU),全网首发,实现极限涨点 本文将在 YOLOv8 主干中引入 MobileNetV4 轻量化骨干,同时,在检测头引入 CBAM机制注意力机制,并采用 Powerful-IoU 损失函数作为模型的损失函数,其中,MobileNetV4 通过引入通用反向瓶颈(UIB)搜索块和 Mobie MQA 注意力模块创新设计,实现了模型的轻量级化;同时,MobileNetV4 采用了优化的 NAS 策略,通过粗粒度和细粒度搜索相结合的方法,显著提高了搜索效率并改善了模型质量。 阅读详情

相关推荐

应急响应-勒索病毒典型处置案例

服务器感染Globelmposter勒索病毒 事件背景 2020年5月,某公司内外服务器遭遇勒索病毒攻击,应急响应工程师在抵达现场后,对包含服务器在内的13太机器进行系统排查和日志分析。 事件处置 勒索病毒初步判定 首先,对其中一台感染勒索病毒的主机A(源地址为192.168.111.129)进行排查,通过勒索信确认为GlobeImposter勒索病毒,如图所示。 在本地桌面及磁盘发现加密文件后缀为.RESERVE,如图所示。 系统排查 主机账号 通过

qq_50765147的博客 2458

CodeForces - 914D

题意:支持单点修改,询问区间内修改一个数字可否使得区间内所有数字的gcd是x的倍数,询问并不真的改变序列中的数字。 题目链接:CodeForces - 914D 线段树维护区间gcd。 询问的时候, 如果区间拆不开,那么就继续搜下去就可以 如果可以拆开成两半: 查询左右区间的gcd为lanslanslans和ransransrans,如果lans%x==0&amp;&amp;ra...

cy41的博客 256

基于YOLO11深度学习的糖尿病视网膜病变智能诊断系统【Python源码+Pyqt5界面+数据集+训练代码】

本文详细介绍如何利用YOLO11深度学习技术构建糖尿病视网膜病变智能诊断系统。项目提供完整的Python源码、PyQt5图形界面、标注数据集及训练代码,实现从图片、视频到摄像头的多模态病变检测,旨在辅助医疗筛查,提升诊断效率。

weixin_29089057的博客 277

codeforces 914D(线段树)

题意: 1单点更新 2查询[l,r]区间的值最多改变一个能不能使得区间的gcd等于给出的x,但是此改变不改变原来的值。 思路:线段树维护gcd,很简单。查询的时候可以维护一个cnt的值,表示为当一个点的值不整除x的时候,对数进行改变的个数。当cnt>1的时候,直接结束函数。 #include using namespace std; const int maxn = 5e5 +

Everything can be done! 1105

ROS2 -Jazzy 一步一步(第一步_工作空间以及编译)

文件夹作用特点是否需要手动创建/维护src存放自己写的 ROS 2 包一个 workspace 可以有多个包需要手动创建build保存编译过程中的中间文件每个包生成对应子目录自动生成,可删除install保存编译完成后的功能包每个包有独立子目录,含可执行文件自动生成,可删除log保存编译日志用于查看错误原因、调试自动生成,不需修改colcon是 ROS 2 推荐使用的构建工具自动处理功能包的依赖和编译顺序一条命令就能编译整个工作空间。

jerrykorea的博客 1380

国民技术N32G45X低功耗问题之更改全局变量和栈在RAM中的地址

最近项目中用的MCU是国民技术的N32G45X,MCU的资源很丰富,RAM也很大,配套的库和例程也比较全,用起来还是不错的,但是在调试低功耗的时候还是费了不少劲。 首先由于项目低功耗需要,只能选择停机模式2(STOP2)。根据数据手册的描述,在此模式下外部低速时钟开启, RTC运行, R-SRAM保持,所有I/O状态保持,独立看门狗处于关闭状态,25℃的条件下电流为10个微安。 用的这款MCU的RAM是144KB,分为SRAM(128KB)和R-SRAM( Retention SRAM – 16KB),如果

狂想家 2485

codeforce_914D(GCD+线段树)

题意:给出一个数组,查询某一段的GCD是否猜测正确,假如这段最多有一个数不是所有数GCD的倍数,那么就算猜对了,否则就是猜错。 思路:用线段树维护每一段的GCD,单点更新不用说,那么在查询的时候,需要稍微做点手脚,向下查询的时候,如果说左子树的GCD不能整除x,就说明至少在左子树这个区间有一个数不是x的倍数,这些数可能在要找的区间[a,b]里,也可能不在,而是在左子树-[a,b]的集合里,如果是

沉醉不知归路 918

《最游记》游戏开发全栈指南:从源码解析到实战部署

本文提供了一份详尽的《最游记》游戏源码全栈开发指南。文章深入解析了这款3D玄幻网游的完整源码结构,涵盖客户端、服务端、引擎和工具链,并提供了从环境搭建、核心模块解析到实战修改与部署的完整流程。对于希望深入理解MMORPG架构的开发者而言,这份指南是宝贵的实战资源。

weixin_28363123的博客 71

CodeForces914D——线段树

英文题面,题目大意:Bash喜欢对数列进行操作。第一种操作是询问l~r区间内的gcd值是否几乎为x,几乎为表示能否至多修改一个数达到。第二种操作是将ai修改为x。总共Q个询问,N个数。 这道题显然是一道区间信息维护的题目,所以我们考虑使用线段树。如果没有修改一个点的限制,那么我们只需要开一个记录gcd的线段树即可。对于修改一个点的限制,我们这么考虑:如果(一串区间的gcd值 mod 题目给出的v...

stevensonson的博客 268

国产麒麟系统下用Rider开发C#桌面应用:从环境配置到Avalonia UI实战

本文详细介绍了在国产麒麟系统上使用JetBrains Rider开发C#桌面应用的完整流程,重点讲解了Avalonia UI框架的实战应用。从环境配置、Rider安装到Avalonia项目创建和UI开发技巧,全面覆盖了在非Windows环境下进行C#开发的关键步骤和优化建议,助力开发者高效构建跨平台桌面应用。

weixin_27791839的博客 387

简单搭建 可视化日志+链路追踪

JAVA 可视化日志、链路追踪、plumeLog、Tlog、Logback

qq_39535439的博客 1204

codeforces 914D(线段树区间GCD)

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

gml1999的博客 442

【单片机】STM32F103C8T6 最小系统板原理图

STM32F103C8T6是一款基于ARM Cortex-M3内核的32位微控制器,由STMicroelectronics(ST)公司生产。它是STMicroelectronics的STM32系列微控制器中的一员,被广泛应用于嵌入式系统和电子设备中。LQFP48封装(Low-profile Quad Flat Package,48引脚)SRAM(静态随机访问存储器):20 KB。支持JTAG调试和编程接口(可选)多个通用输入/输出口(GPIO)USB接口(用于USB设备模式)内置调试和编程接口(SWD)

q742971636的博客 6万+

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

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

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

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

[Codeforces 914D] Bash and a Tough Math Puzzle

[题目链接] https://codeforces.com/contest/914/problem/D [算法] 显然 , 当一个区间[l , r]中为d倍数的数的个数 <= 1 , 答案为Yes , 否则为No 线段树简单维护即可 , 详见代码 , 时间复杂度 : O(NlogN ^ 2) [代码] ...

186

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

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

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

weixin_30715523的博客 181

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

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

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

CodeForces - 914D -Bash and a Tough Math Puzzle (线段树+点更新)

题目链接:http://codeforces.com/problemset/problem/914/D 题目: Bash likes playing with arrays. He has an arraya1, a2, ...anofnintegers. He likes to guess the greatest common divisor (gcd) of different...

weixin_44757834的博客 204

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

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

枚举星星 297

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(线段树+gcd)

题目 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可以通过区...

小衣同学的博客 306

【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
上一篇: CodeForces - 1196D2 - RGB Substring (hard version) ( 思维 + 前缀和 )
下一篇: CodeForces - 138C - Mushroom Gnomes - 2 - ( 线段树 + 离散化 )
Cosmic_Tree
博客等级 码龄7年 134粉丝 337原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值