数据太弱,直接让我小暴力一下就过了,一开始没注意到时间是15000MS,队友发现真是太给力了

  1. #include <cstdio>
  2. #include <cstring>
  3. int n,q,a[],x[],p,l[],r[],t[];
  4. int tree[];
  5. void build(int l, int r, int rt)
  6. {
  7. tree[rt]=-;
  8. if(l==r){
  9. tree[rt]=;
  10. return;
  11. }
  12. int m=(l+r)/;
  13. build(l,m,rt*);
  14. build(m+,r,rt*+);
  15. }
  16. void update(int x, int y, int z, int l, int r, int rt)
  17. {
  18. if(x<=l&&y>=r){
  19. tree[rt]=z;
  20. return;
  21. }
  22. if(tree[rt]!=-) {
  23. tree[rt*]=tree[rt];
  24. tree[rt*+]=tree[rt];
  25. tree[rt]=-;
  26. }
  27. int m=(l+r)/;
  28. if(x<=m) update(x,y,z,l,m,rt*);
  29. if(y>m) update(x,y,z,m+,r,rt*+);
  30. }
  31. int query(int k, int l, int r, int rt)
  32. {
  33. if(tree[rt]!=-) return tree[rt];
  34. int m=(l+r)/;
  35. if(k<=m) return(query(k,l,m,rt*));
  36. else return(query(k,m+,r,rt*+));
  37. }
  38. int main()
  39. {
  40. int cas;
  41. scanf("%d",&cas);
  42. while(cas--){
  43. memset(tree,-,sizeof(tree));
  44. scanf("%d",&n);
  45. build(,n,);
  46. for(int i=; i<=n; i++)
  47. scanf("%d",&a[i]);
  48. scanf("%d",&q);
  49. for(int i=; i<=q; i++)
  50. {
  51. scanf("%d%d%d%d",&t[i],&l[i],&r[i],&x[i]);
  52. if(t[i]==) update(l[i],r[i],i,,n,);
  53. }
  54. for(int i=; i<=n; i++){
  55. p=query(i,,n,);
  56. if(p) a[i]=x[p];
  57. for(int j=p+; j<=q; j++)
  58. if(t[j]==&&l[j]<=i&&r[j]>=i){
  59. if(a[i]>x[j]){
  60. int aa=a[i],bb=x[j],t=aa%bb;
  61. while(t!=){
  62. aa=bb;
  63. bb=t;
  64. t=aa%bb;
  65. }
  66. a[i]=bb;
  67. }
  68. }
  69. }
  70. for(int i=; i<=n; i++)
  71. printf("%d ",a[i]);
  72. printf("\n");
  73. }
  74. }

CLJ给出的正确题解:

  

既然gcd(a[i],x)<0.5a[i]

  那么最多每个数字修改不会超过32次,

应该便是储存区间最大值以及增加判断区间内数字是否一致的flag

  每次对于区间最大值>x的区间进行修改,最差情况无非是每个数字都不同,且数字都大于x,nlgn,而最多就修改32次,因此最差情况nlg^2n。

  虽然证明麻烦,但是凭借感觉还是能够明白的。

实现相对简单便不再累赘。

HDU 4902的更多相关文章

  1. HDU 4902 (线段树)

    Problem Nice boat(HDU 4902) 题目大意 维护一个序列,两种操作. 第一种操作,将一段区间[l,r]赋值为x. 第二种操作,将一段区间[l,r]中大于等于x的数与x求gcd. ...

  2. HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...

  3. HDU 4902 Nice boat (线段树)

    Nice boat 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4902 Description There is an old country a ...

  4. hdu 4902 线段树+逆向模拟

    http://acm.hdu.edu.cn/showproblem.php?pid=4902 出n个数,然后对这n个数进行两种操作: 如果是 1 l r x,则把 [l, r] 区间里面的每一个数都变 ...

  5. hdu 4902 Nice boat(线段树区间改动,输出终于序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 Problem Description There is an old country and ...

  6. hdu 4902 Nice boat--2014 Multi-University Training Contest 4

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=4902 Nice boat Time Limit: 30000/15000 MS (Java/Othe ...

  7. HDU 4902 Nice boat --线段树(区间更新)

    题意:给一个数字序列,第一类操作是将[l,r]内的数全赋为x ,第二类操作是将[l,r]中大于x的数赋为该数与x的gcd,若干操作后输出整个序列. 解法: 本题线段树要维护的最重要的东西就是一个区间内 ...

  8. 2014多校第四场1006 || HDU 4902 Nice boat (线段树 区间更新)

    题目链接 题意 : 给你n个初值,然后进行两种操作,第一种操作是将(L,R)这一区间上所有的数变成x,第二种操作是将(L,R)这一区间上所有大于x的数a[i]变成gcd(x,a[i]).输出最后n个数 ...

  9. hdu 4902 Nice boat 线段树

    题目链接 给n个数, 两种操作, 第一种是将区间内的数变成x, 第二种是将区间内大于x的数变为gcd(x, a[i]). 开三个数组, 一个记录区间最大值, 这样可以判断是否更新这一区间, 一个laz ...

随机推荐

  1. [转载]关于安装Android Studio的一些问题的解决方法

    最近在研究Android编程,在Android Studio安装和使用时遇到了麻烦,从园子里找到了<关于安装Android Studio的一些问题的解决方法>的,很多问题找到了解决办法. ...

  2. 【BZOJ】【2194】快速傅里叶之二

    FFT c[k]=sigma a[i]*b[i-k] 这个形式不好搞…… 而我们熟悉的卷积的形式是这样的 c[k]=sigma a[i]*b[k-i]也就是[下标之和是定值] 所以我们将a数组反转一下 ...

  3. 别让安全问题拖慢了 DevOps!

    DEVSECOPS 所面临的挑战 敏捷开发和 DevOps 方法的出现使软件开发的速度与质量都有所提升,但它们不经意地也为安全机构增压不少.从前的安全策略是基于静态数据的,而在产品上线前才应用这些策略 ...

  4. DevOps 和技术债务偿还自动化

    当企业想要迁移到一个 DevOps 模型时,经常需要偿还高等级的技术债务 说得更明确一点,机构往往陷入「技术债务的恶性循环」中,以至于任何迅速.敏捷的迁移方式都无法使用.这是技术债务中的希腊债务危机水 ...

  5. Properties --- C++读配置信息的类

    http://blog.csdn.net/billow_zhang/article/details/4304980 在开发实践中,积累了一些通用的C++ 类库,在此写出来给大家分享.也希望能给出更好的 ...

  6. Chp14: Java

    1.finally keyword: finally keyword is used in association with a try/catch block and guarantees that ...

  7. C#接口的经典案例

    C#接口(interface)实例子(简单而经典)2008/12/04 10:04using System; using System.Collections.Generic; using Syste ...

  8. Sina App Engine(SAE)入门教程(3)-KVDB使用

    简介 因为传统关系型数据库在分布式环境下表现的扩展性不足等缺点,近年来NoSQL的概念渐渐成为业界关注的焦点,越来越多的技术人员也习惯于使用NoSQL数据库进行日常开发,SAE为了应对这种新需求,也进 ...

  9. HTML5 增强的页面元素

    一.HTML5 改良的 input 元素的种类 1.<input type="number" id="num1"> var n1 = documen ...

  10. 汇编debug 截图3