传送门

线段树辣鸡题。

题意简述:给出一个序列,支持修改其中一个数,以及在允许自行修改某个数的情况下询问区间[l,r][l,r][l,r]的gcdgcdgcd是否可能等于一个给定的数。


看完题就感觉是道线段树。

修改操作不谈了。

查询给人的第一感觉有点新奇。

但仔细分析就是sbsbsb操作了。

我们维护一个全局变量cntcntcnt来记录为了达到要求已经修改了几个数,如果cnt>1cnt>1cnt>1剪枝就行了。

代码:

#include<bits/stdc++.h>
#define ri register int
#define lc (p<<1)
#define rc (p<<1|1)
#define mid (T[p].l+T[p].r>>1)
using namespace std;
const int N=5e5+5;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
int n,a[N],q,cnt;
struct Node{int l,r,g;}T[N<<2];
inline void pushup(int p){T[p].g=__gcd(T[lc].g,T[rc].g);}
inline void build(int p,int l,int r){
	T[p].l=l,T[p].r=r;
	if(l==r){T[p].g=a[l];return;}
	build(lc,l,mid),build(rc,mid+1,r),pushup(p);
}
inline void update(int p,int k,int v){
	if(T[p].l==T[p].r){T[p].g=v;return;}
	if(k<=mid)update(lc,k,v);
	else update(rc,k,v);
	pushup(p);
}
inline void query(int p,int ql,int qr,int v){
	if(cnt>=2)return;
	if(ql<=T[p].l&&T[p].r<=qr){
		if(T[p].g%v==0)return;
		if(T[p].l==T[p].r){++cnt;return;}
		if(T[lc].g%v&&T[rc].g%v){cnt+=2;return;}
		T[lc].g%v?query(lc,ql,qr,v):query(rc,ql,qr,v);
		return;
	}
	if(qr<=mid)return query(lc,ql,qr,v);
	if(ql>mid)return query(rc,ql,qr,v);
	query(lc,ql,mid,v),query(rc,mid+1,qr,v);
}
int main(){
	n=read();
	for(ri i=1;i<=n;++i)a[i]=read();
	build(1,1,n);
	for(ri tt=read(),l,r,x,op;tt;--tt){
		op=read();
		if(op==1)l=read(),r=read(),x=read(),cnt=0,query(1,l,r,x),puts(cnt<2?"YES":"NO");
		else l=read(),x=read(),update(1,l,x);
	}
	return 0;
}

2018.12.08 codeforces 914D. Bash and a Tough Math Puzzle(线段树)的更多相关文章

  1. Codeforces 914D - Bash and a Tough Math Puzzle 线段树,区间GCD

    题意: 两个操作, 单点修改 询问一段区间是否能在至多一次修改后,使得区间$GCD$等于$X$ 题解: 正确思路; 线段树维护区间$GCD$,查询$GCD$的时候记录一共访问了多少个$GCD$不被X整 ...

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

    题目链接 \(Description\) 给定一个序列,两种操作:一是修改一个点的值:二是给一个区间\([l,r]\),问能否只修改一个数使得区间gcd为\(x\). \(Solution\) 想到能 ...

  3. [Codeforces 914D] Bash and a Tough Math Puzzle

    [题目链接] https://codeforces.com/contest/914/problem/D [算法] 显然 , 当一个区间[l , r]中为d倍数的数的个数 <= 1 , 答案为Ye ...

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

    题目链接  Round #458 (Div. 1 + Div. 2, combined)  Problem D 题意  给定一个序列,两种询问:单点修改,询问某个区间能否通过改变最多一个数使得该区间的 ...

  5. cf914D. Bash and a Tough Math Puzzle(线段树)

    题意 题目链接 Sol 直接在线段树上二分 当左右儿子中的一个不是\(x\)的倍数就继续递归 由于最多递归到一个叶子节点,所以复杂度是对的 开始时在纠结如果一段区间全是\(x\)的两倍是不是需要特判, ...

  6. CF914D Bash and a Tough Math Puzzle 线段树+gcd??奇怪而精妙

    嗯~~,好题... 用线段树维护区间gcd,按如下法则递归:(记题目中猜测的那个数为x,改动次数为tot) 1.若子区间的gcd是x的倍数,不递归: 2.若子区间的gcd是x的倍数,且没有递归到叶子结 ...

  7. CodeForces 914DBash and a Tough Math Puzzle(线段树的骚操作)

    D. Bash and a Tough Math Puzzle time limit per test 2.5 seconds memory limit per test 256 megabytes ...

  8. 914D Bash and a Tough Math Puzzle

    传送门 分析 用线段树维护区间gcd,每次查询找到第一个不是x倍数的点,如果这之后还有gcd不能被x整除的区间则这个区间不合法 代码 #include<iostream> #include ...

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

    Bash and a Tough Math Puzzle CodeForces 914D 线段树+gcd数论 题意 给你一段数,然后小明去猜某一区间内的gcd,这里不一定是准确值,如果在这个区间内改变 ...

随机推荐

  1. POJ-3278.CatchThatCow(数字BFS最短路输出)

    本题大意:一个农夫和一头牛在一个数轴上,牛不动,农夫每次可使自己的坐标 +1 , -1, *2 ,问最小需要多少次农夫与牛坐标相等. 本题思路:最短路,BFS. 本题代码: #include < ...

  2. Android Studio生成签名安装包(Generate Signed APK)

    一 打开构建对话框. 二 创建新的密钥库(key store) 可以选择已创建的密钥库,也可以选择创建新的密钥库. 创建完成后,自动导入. 三 选择签名类型. 如果不选,会提示错误. 这里将新旧两种签 ...

  3. Disruptor底层实现讲解与RingBuffer数据结构讲解

    Disruptor术语 RingBuffer:被看作Disruptor最主要的组件,然而从2.0开始RingBuffer仅仅负责存储和更新在Disruptor中流通的数据.对一些特殊的使用场景能够被用 ...

  4. 100-days:nine

    Title: Boeing(波音飞机) crash isolates FAA as(伴随,随着) China leads push against Max(出事机型,即737 Max) crash n ...

  5. f5电源模块损坏

    现象: ssh登录f5后有日志显示 现场确认f5 2槽电源指示灯不亮,且电源线正常.重新开关电源模块,拔插电源线后仍不亮.故确认是电源模块损坏. 处理:直接采购新的电源模块更换即可.f5电源支持热插拔 ...

  6. js 定时执行

    代码: 格式例子: setInterval(方法名,1000*60); setInterval("方法名()",1000*60); setInterval(function () ...

  7. ABAP开发需要养成的习惯—处理规范,日期,sort,改结构

    sELECT select之后不要急着处理,最多用下sort还有delete adjacent,不用sy-subrc判断之后loop操作,要注意处理逻辑. sort一个好处是为了后面read tabl ...

  8. HttpClient--使用HttpClient进行Get Post请求访问

    在java后台开发中,我们有时候需要调用其他网站的接口进行数据的获取操作,我们一般会采用 1.java net 包中的URL 类,进行网络的数据获取 2.使用apache提供的HttpClient进行 ...

  9. HR 常用事务代码

    HR的键值权限查看:  oosb 删除人员 : pu01 查看人员主数据:PA30 对人员进行入职.离职.调岗等基本操作:PA40 查看HR中的公式的意思:PE04 查看HR中的工资项:PE02 创建 ...

  10. idea spring-boot gradle mybatis 搭建开发环境

    使用工具idea 2017.2开发,gradle构建项目,使用的技术有spring-boot.mybatis 1.新建项目 说明:1.src为源码路径,开发主要在src下 2.src/main/jav ...