1. #include <stdio.h>
  2. #define lson l,mid,id<<1
  3. #define rson mid+1,r,id<<1|1
  4. const int MM = ;
  5. int num[MM<<],lazy[MM<<];
  6.  
  7. void push_down(int l,int r,int id)
  8. {
  9. int mid=(l+r)>>;
  10. num[id<<]=lazy[id]*(mid-l+);
  11. num[id<<|]=lazy[id]*(r-mid);
  12. lazy[id<<]=lazy[id<<|]=lazy[id];
  13. lazy[id]=;
  14. }
  15. void build_tree(int l,int r,int id)
  16. {
  17. lazy[id]=;
  18. if(l==r)
  19. {
  20. scanf("%d",&num[id]);
  21. return;
  22. }
  23. else
  24. {
  25. int mid=(l+r)>>;
  26. build_tree(lson);
  27. build_tree(rson);
  28. num[id]=num[id<<]+num[id<<|];
  29. }
  30. }
  31.  
  32. void Update(int L,int R,int e,int l,int r,int id)
  33. {
  34. if(L<=l&&r<=R)
  35. {
  36. num[id]=(r-l+)*e;
  37. lazy[id]=e;
  38. return;
  39. }
  40. if(lazy[id])push_down(l,r,id);
  41. int mid=(l+r)>>;
  42. if(L<=mid)
  43. Update(L,R,e,lson);
  44. if(R>mid)
  45. Update(L,R,e,rson);
  46. num[id]=num[id<<]+num[id<<|];
  47.  
  48. }
  49. int Query(int L,int R,int l,int r,int id)
  50. {
  51. if(L<=l&&r<=R)
  52. {
  53. return num[id];
  54. }
  55. if(lazy[id])push_down(l,r,id);
  56. int mid=(l+r)>>;
  57. int ret=;
  58. if(L<=mid)ret+=Query(L,R,lson);
  59. if(R>mid)ret+=Query(L,R,rson);
  60. num[id]=num[id<<]+num[id<<|];
  61. return ret;
  62. }
  63. int main()
  64. {
  65. int n,m,op,x,y,z;
  66. scanf("%d",&n);
  67. build_tree(,n,);
  68. scanf("%d",&m);
  69. while(m--)
  70. {
  71. scanf("%d",&op);
  72. if(op==)
  73. {
  74. scanf("%d %d %d",&x,&y,&z);
  75. Update(x,y,z,,n,);
  76. }
  77. else
  78. {
  79. scanf("%d %d",&x ,&y);
  80. int ans=Query(x,y,,n,);
  81. printf("%d\n",ans );
  82. }
  83. }
  84. }

HIHO线段树(成段)的更多相关文章

  1. POJ 3468 A Simple Problem with Integers(线段树 成段增减+区间求和)

    A Simple Problem with Integers [题目链接]A Simple Problem with Integers [题目类型]线段树 成段增减+区间求和 &题解: 线段树 ...

  2. ACM: Copying Data 线段树-成段更新-解题报告

    Copying Data Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description W ...

  3. Codeforces Round #149 (Div. 2) E. XOR on Segment (线段树成段更新+二进制)

    题目链接:http://codeforces.com/problemset/problem/242/E 给你n个数,m个操作,操作1是查询l到r之间的和,操作2是将l到r之间的每个数xor与x. 这题 ...

  4. POJ 2777 Count Color (线段树成段更新+二进制思维)

    题目链接:http://poj.org/problem?id=2777 题意是有L个单位长的画板,T种颜色,O个操作.画板初始化为颜色1.操作C讲l到r单位之间的颜色变为c,操作P查询l到r单位之间的 ...

  5. hdu 4747【线段树-成段更新】.cpp

    题意: 给出一个有n个数的数列,并定义mex(l, r)表示数列中第l个元素到第r个元素中第一个没有出现的最小非负整数. 求出这个数列中所有mex的值. 思路: 可以看出对于一个数列,mex(r, r ...

  6. HDU1698_Just a Hook(线段树/成段更新)

    解题报告 题意: 原本区间1到n都是1,区间成段改变成一个值,求最后区间1到n的和. 思路: 线段树成段更新,区间去和. #include <iostream> #include < ...

  7. HDU 3577 Fast Arrangement ( 线段树 成段更新 区间最值 区间最大覆盖次数 )

    线段树成段更新+区间最值. 注意某人的乘车区间是[a, b-1],因为他在b站就下车了. #include <cstdio> #include <cstring> #inclu ...

  8. poj 3468 A Simple Problem with Integers 【线段树-成段更新】

    题目:id=3468" target="_blank">poj 3468 A Simple Problem with Integers 题意:给出n个数.两种操作 ...

  9. POJ3468_A Simple Problem with Integers(线段树/成段更新)

    解题报告 题意: 略 思路: 线段树成段更新,区间求和. #include <iostream> #include <cstring> #include <cstdio& ...

随机推荐

  1. CSS3 功能

    1.  CSS3在css2的基础上增加了很多功能,ie8以下的浏览器有可能不支持某些属性,增加了很多圆角.渐变.旋转.阴影等效果 2.  文本修饰 text-decoration 属性用来设置或删除文 ...

  2. RecycleView使用的那些坑

    1.为条目设置margin值时,在6.0系统上会无效.此时在item的根外面套一层viewgroup解决. 2.当条目中有imageview时,必须给imageview设置 src或者backgrou ...

  3. Python 日期和时间

    Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能. Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. ...

  4. DevExpress.XtraGrid.Views.BandedGrid.BandedGridView

    使用的是DevExpress.XtraGrid.Views.BandedGrid.BandedGridView 类 没有在工具箱里找到对应控件 ,绕了一下,先创建一个gridcontrol ,然后gr ...

  5. 【转】MYSQL入门学习之十三:自定义函数的基本操作

    转载地址:http://www.2cto.com/database/201212/177382.html 一.自定义函数(UDF)的特性和功能  www.2cto.com           函数能分 ...

  6. UWP开发入门系列笔记之(一):UWP初览

    标签: 随着微软Build2015带来的好消息,Win10正式版发布的日子已经离我们越来越近了,我们也终于欣喜地看到:一个统一的Windows平台对于开发人员来说充满了吸引力,这局棋下的好大的说--于 ...

  7. windows上安装apache python mod_python

    综述:   windows上安装apache python mod_python的例子.教程甚至图解都不少:但作为新手还是会出错,而且一时无法快速排解. 在此笔者将根据自己的实践经验,给出几个需要注意 ...

  8. Y2K Accounting Bug 分类: POJ 2015-06-16 16:55 14人阅读 评论(0) 收藏

    Y2K Accounting Bug Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11222   Accepted: 56 ...

  9. 测试Animation大型动画文件拆分播放的可行性

    最近遇到一个问题,剧情动画文件大了复杂了之后,每次修改输出很麻烦,导出fbx就需要20分钟. 所以我想到了一个比较好的解决方法,在unity这边解决.把动画文件拆分成若干份,然后赋予不同的层并行播放 ...

  10. ubuntu下环境变量

    01:/etc/environment:是设置整个系统的环境: 02:/etc/profile:是设置所有用户的环境: 03:.bashrc :本地用户: