D. Bash and a Tough Math Puzzle

http://codeforces.com/contest/914/problem/D

题意:

  单点修改,每次询问一段l~r区间能否去掉小于等于1个数,使gcd为x

分析:

  线段树。

  线段树二分。如果一边的gcd不是x,那么递归这一边,找到这个位置为止,计算这样的位置的个数。

代码:

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<iostream>
  6. #include<cctype>
  7. #include<set>
  8. #include<vector>
  9. #include<queue>
  10. #include<map>
  11. #define Root 1, n, 1
  12. #define lson l, mid, rt << 1
  13. #define rson mid + 1, r, rt << 1 | 1
  14. #define fi(s) freopen(s,"r",stdin);
  15. #define fo(s) freopen(s,"w",stdout);
  16. using namespace std;
  17. typedef long long LL;
  18.  
  19. inline int read() {
  20. int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
  21. for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
  22. }
  23.  
  24. const int N = ;
  25.  
  26. int gcd(int a,int b) {
  27. return b == ? a : gcd(b, a % b);
  28. }
  29.  
  30. int g[N << ], G, cnt;
  31.  
  32. void pushup(int rt) {
  33. g[rt] = gcd(g[rt << ], g[rt << | ]);
  34. }
  35. void build(int l,int r,int rt) {
  36. if (l == r) {
  37. g[rt] = read(); return ;
  38. }
  39. int mid = (l + r) >> ;
  40. build(lson), build(rson);
  41. pushup(rt);
  42. }
  43. void update(int l,int r,int rt,int p,int v) {
  44. if (l == r) {
  45. g[rt] = v; return ;
  46. }
  47. int mid = (l + r) >> ;
  48. if (p <= mid) update(lson, p, v);
  49. else update(rson, p, v);
  50. pushup(rt);
  51. }
  52. bool query(int l,int r,int rt,int L,int R) {
  53. if (g[rt] % G == ) return true; // 如果区间gcd为G的倍数,那么这个区间合法
  54. if (l == r) return (++cnt) <= ; // 否则递归下去,找到不合法的位置,计算有几个,大于1个不合法。
  55. int mid = (l + r) >> ;
  56. if (L > mid) query(rson, L, R);
  57. else if (R <= mid) query(lson, L, R);
  58. else return query(lson, L, R) && query(rson, L, R);
  59. }
  60. int main() {
  61. int n = read();
  62. build(Root);
  63. int Q = read();
  64. while (Q--) {
  65. int opt = read();
  66. if (opt == ) {
  67. int l = read(), r = read(); G = read(); cnt = ;
  68. puts(query(Root, l, r) ? "YES" : "NO");
  69. }
  70. else {
  71. int p = read(), v = read();
  72. update(Root, p, v);
  73. }
  74. }
  75. return ;
  76. }

CF 914 D. Bash and a Tough Math Puzzle的更多相关文章

  1. codeforces 914 D Bash and a Tough Math Puzzle

    #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #i ...

  2. D. Bash and a Tough Math Puzzle 解析(線段樹、數論)

    Codeforce 914 D. Bash and a Tough Math Puzzle 解析(線段樹.數論) 今天我們來看看CF914D 題目連結 題目 給你一個長度為\(n\)的數列\(a\), ...

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

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

  4. Codecraft-18 and Codeforces Round #458:D,Bash and a Tough Math Puzzle

    题目传送门 题目大意:Bash喜欢对数列进行操作.第一种操作是询问l~r区间内的gcd值是否几乎为x,几乎为表示能否至多修改一个数达到.第二种操作是将ai修改为x.总共Q个询问,N个数. Soluti ...

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

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

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

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

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

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

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

    传送门 线段树辣鸡题. 题意简述:给出一个序列,支持修改其中一个数,以及在允许自行修改某个数的情况下询问区间[l,r][l,r][l,r]的gcdgcdgcd是否可能等于一个给定的数. 看完题就感觉是 ...

  9. Bash and a Tough Math Puzzle CodeForces - 914D (线段树二分)

    大意:给定序列, 单点修改, 区间询问$[l,r]$内修改至多一个数后$gcd$能否为$x$ 这题比较有意思了, 要注意到询问等价于$[l,r]$内最多有1个数不为$x$的倍数 可以用线段树维护gcd ...

随机推荐

  1. OC NSMutableArray

    #import <Foundation/Foundation.h> #import "Student.h" void arrayCreate() { NSMutable ...

  2. 关于token,session,cookie的概念和区别

    记录几篇讲的比较好的文章 https://www.cnblogs.com/moyand/p/9047978.html https://blog.csdn.net/wabiaozia/article/d ...

  3. AngularJS应用的启动和执行过程

    启动(startup): <!doctype html> <html ng-app> <head> <script src="http://code ...

  4. 配置tomcat远程debug

    Linux系统中在编辑catalina.sh文件,修改JAVA_OPTS的变量值为如下即可. JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -Xdebug -Xrunjd ...

  5. JDBC(3)ResultSet

    ResultSet 在执行查询(select)时候使用 这是一个结果对象,该对象包含结果的方法但指针定位到一行时 调用Statement 对象的 executeQuery(sql)可以得到结果集 可以 ...

  6. springboot集成swagger2构建RESTful API文档

    在开发过程中,有时候我们需要不停的测试接口,自测,或者交由测试测试接口,我们需要构建一个文档,都是单独写,太麻烦了,现在使用springboot集成swagger2来构建RESTful API文档,可 ...

  7. Spring mvc实现ex导入导出

    依赖架包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</arti ...

  8. 【转载】iPhone屏幕尺寸、分辨率及适配

    iPhone屏幕尺寸.分辨率及适配 转载http://m.blog.csdn.net/article/details?id=42174937 1.iPhone尺寸规格 iPhone 整机宽度Width ...

  9. CSS3-transition常用属性及示例

    transition参数 语法 transition: property duration timing-function delay transition属性是个复合属性,她包括以下几个子属性: t ...

  10. 原生 JS 实现扫雷 (分析+代码实现)

    阅读这篇文章需要掌握的基础知识:Html5.CSS.JavaScript 在线Demo:查看 扫雷规则 在写扫雷之前,我们先了解下它的游戏规则 ● 扫雷是一个矩阵,地雷随机分布在方格上. ● 方格上的 ...