题意

题目链接

Sol

直接在线段树上二分

当左右儿子中的一个不是\(x\)的倍数就继续递归

由于最多递归到一个叶子节点,所以复杂度是对的

开始时在纠结如果一段区间全是\(x\)的两倍是不是需要特判,实际上是不需要的。

可以这么想,如果能成功的话,我们可以把那个数改成\(1\),这样比\(x\)大的数就不会对答案产生影响了。

不过我的线段树为啥要开6倍空间才能过。。真是狗血、、

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 3e6 + 10, INF = 1e9 + 10;
inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-')f =- 1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}
int N, M, a[MAXN];
#define ls k << 1
#define rs k << 1 | 1
struct Node {int l, r, g;
}T[MAXN];
int gcd(int a, int b) {return (b == 0 ? a : gcd(b, a % b));
}
void update(int k) {T[k].g = gcd(T[ls].g, T[rs].g);
}
void Build(int k, int ll, int rr) {T[k] = (Node) {ll, rr};if(ll == rr) {T[k].g = a[ll]; return ;}int mid = T[k].l + T[k].r >> 1;Build(ls, ll, mid); Build(rs, mid + 1, rr);update(k);
}
void PointChange(int k, int pos, int val) {if(T[k].l == T[k].r) {T[k].g = val; return ;}int mid = T[k].l + T[k].r >> 1;if(pos <= mid) PointChange(ls, pos, val); else PointChange(rs, pos, val);update(k);
}
int sum = 0;
void IntervalTims(int k, int ll, int rr, int val) {if(sum > 1) return ;if(T[k].l == T[k].r) sum++;int mid = T[k].l + T[k].r >> 1;if(ll <= mid && (T[ls].g % val)) IntervalTims(ls, ll, rr, val);if(rr  > mid && (T[rs].g % val)) IntervalTims(rs, ll, rr, val);
}
main() {N = read();for(int i = 1; i <= N; i++) a[i] = read();Build(1, 1, N);M = read();while(M--) {int opt = read();if(opt == 1) {int l = read(), r = read(), x = read();sum = 0; IntervalTims(1, l, r, x);puts(sum > 1 ? "NO" : "YES");} else {int pos = read(), x = read();PointChange(1, pos, x);}}
}
/*
*/

cf914D. Bash and a Tough Math Puzzle(线段树)相关推荐

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

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

  2. Codecraft-18 and Codeforces Round #458: D. Bash 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 ...

  3. 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 题解:区间询问,单点需 ...

  4. 【Codeforces Round #458 D.Bash and a Tough Math Puzzl】线段树

    链接 Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) 题意 给你一个区间,要支持两种区间操作. 第一种操作是单点更 ...

  5. CF 线段树 gcd改变

    Bash and a Tough Math Puzzle 可以过100的数据 但是50w就过不了了,具体不明,没看过题解. 没加第二种情况的返回值.. #include <iostream> ...

  6. HDU - 3183 A Magic Lamp 线段树

    题目链接 题意:数字字符串删除k个值后的数字最小不算前导0 思路:其实就是最小字典序,那么我们肯定一位一位的确定最小的值,那么对于i位,其实找i+1~i+k位中最小的数有没有比当前位置的数小,如果有的 ...

  7. HDU - 4614 Vases and Flowers 线段树+二分

    题目链接 思路:线段树维护区间和,当k=1时,询问二分询问[x-(x~n-1)]找到最小位置,复杂度n*logn*logn卡过 #include<stdio.h> #include< ...

  8. POJ - 2763 Housewife Wind LCA+dfs序+线段树

    q次询问求两个点之间的距离,并且可以随时修改某条边的长度,最短距离可以用lca来求,但是树上维护每一个点到root的距离必须要用dfs序来记录时间戳,在dfs的时候顺便记录每一条边(u,v)对应的v节 ...

  9. HYSBZ - 1798 Seq 维护序列seq 线段树lazy标记

    传送门 这道题属实是线段树的道比刷题,又加又乘的,当然还可能会有乘除,阶乘等等可能的情况. 对于这道题,主要的一个就是怎么记录lazy标记,首先的话一个数组是肯定不行的,设乘的为lazy,加的为add ...

最新文章

  1. Linux下安装二进制版mysql-8.0.15
  2. STM32F1库函数初始化系列:串口DMA空闲接收_DMA发送
  3. 对于linux下指令的进一步扩充与巩固
  4. c++指定枚举占一个字节
  5. sql 遍历结果print和表格形式
  6. windows和linux 下将tomcat注册为服务
  7. 引用数据类型的一些知识
  8. Vissim 基础教程和技巧
  9. java面向对象程序设计实验指导答案,Java面向对象程序设计实验指导与习题解答...
  10. 计算机财务管理中表格的应用,excel在财务管理中的应用学习心得
  11. Raspberry Pi (树莓派)折腾记之一
  12. android+ios打印机,Android/iOS手机安装HP打印机的详细方法和操作步骤
  13. (求助)idea 编译了spring源码,每次执行debug都要执行很多task,需要时间有点久,请问怎么解决?
  14. 免费把自己写的网页上传到网上(腾讯云)
  15. 黄金矿工~java小游戏【内含源码】
  16. ACM779-兰州烧饼
  17. 计算机应用基础补考申请书,院级教改课题申请书计算机应用基础教学.doc
  18. c语言camel游戏,将单词从camelCase转换为C中的snake_case
  19. 固态硬盘分为哪几种_固态硬盘有哪些接口 固态硬盘接口介绍【详解】
  20. Ubuntu20.04连接校园网WiFi

热门文章

  1. java ora-12505_Oracle SQL Developer连接报错(ORA-12505)的解决方案(两种)
  2. Python 抓取数据存储到Mysql中
  3. MongoDB 3.X 用户权限控制
  4. iOS 6 自动布局入门
  5. Ninject使用demo
  6. 博文视点 OpenParty第11期:世界黑客大会那些事
  7. 新快现类似产品_小米全新折叠屏产品曝光,预计今年还有更多折叠屏产品亮相...
  8. STM32F103五分钟入门系列(十三)独立看门狗IWDG
  9. java for循环的这种写法怎么理解:for (; ; ) {},
  10. 类加载器ClassLoader的角色