Just a Hook

【题目链接】Just a Hook

【题目类型】线段树 区间替换

&题解:

线段树 区间替换 和区间求和 模板题 只不过不需要查询 题里只问了全部区间的和,所以seg[1] 就是answer

【时间复杂度】\(O(nlogn)\)

&代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 100000 + 9 ;
  4. int n,q,x,y,z;
  5. int seg[maxn<<2];
  6. int sign[maxn<<2];
  7. void PushUp(int rt)
  8. {
  9. seg[rt]=seg[rt<<1]+seg[rt<<1|1];
  10. }
  11. void PushDown(int len,int rt)
  12. {
  13. if (sign[rt]){
  14. sign[rt<<1]=sign[rt];
  15. sign[rt<<1|1]=sign[rt];
  16. //左儿子元素多 右儿子元素少 因为与m的求法有关
  17. //我的求法是 b+e>>1 左是[b,m] 右是[m+1,e] 所以奇数的时候是左儿子多
  18. seg[rt<<1]=sign[rt]*(len-len/2);
  19. seg[rt<<1|1]=sign[rt]*(len/2);
  20. sign[rt]=0;
  21. }
  22. }
  23. void Build(int b,int e,int rt)
  24. {
  25. if (b==e){
  26. seg[rt]=1;
  27. return ;
  28. }
  29. int m=b+e>>1;
  30. Build(b,m,rt<<1);
  31. Build(m+1,e,rt<<1|1);
  32. PushUp(rt);
  33. }
  34. void Update(int l,int r,int xx,int b,int e,int rt)
  35. {
  36. if (l<=b&&e<=r){
  37. sign[rt]=xx;
  38. seg[rt]=xx*(e-b+1);
  39. return;
  40. }
  41. PushDown(e-b+1,rt);
  42. int m=b+e>>1;
  43. if (l<=m)
  44. Update(l,r,xx,b,m,rt<<1);
  45. if (m<r)
  46. Update(l,r,xx,m+1,e,rt<<1|1);
  47. PushUp(rt);
  48. }
  49. int K;
  50. void Solve()
  51. {
  52. scanf("%d%d",&n,&q);
  53. memset(sign,0,sizeof(sign));
  54. Build(1,n,1);
  55. for(int i=0;i<q;i++){
  56. scanf("%d%d%d",&x,&y,&z);
  57. Update(x,y,z,1,n,1);
  58. }
  59. printf("Case %d: The total value of the hook is %d.\n",++K,seg[1]);
  60. }
  61. int main()
  62. {
  63. int T;cin>>T;while(T--)
  64. Solve();
  65. return 0;
  66. }

HDU 1698 Just a Hook(线段树 区间替换)的更多相关文章

  1. [HDU] 1698 Just a Hook [线段树区间替换]

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. HDU 1698 Just a Hook(线段树区间替换)

    题目地址:pid=1698">HDU 1698 区间替换裸题.相同利用lazy延迟标记数组,这里仅仅是当lazy下放的时候把以下的lazy也所有改成lazy就好了. 代码例如以下: # ...

  3. HDU.1689 Just a Hook (线段树 区间替换 区间总和)

    HDU.1689 Just a Hook (线段树 区间替换 区间总和) 题意分析 一开始叶子节点均为1,操作为将[L,R]区间全部替换成C,求总区间[1,N]和 线段树维护区间和 . 建树的时候初始 ...

  4. (简单) HDU 1698 Just a Hook , 线段树+区间更新。

    Description: In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of ...

  5. HDU 1698 Just a Hook(线段树区间更新查询)

    描述 In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes ...

  6. HDU 1698 Just a Hook 线段树区间更新、

    来谈谈自己对延迟标记(lazy标记)的理解吧. lazy标记的主要作用是尽可能的降低时间复杂度. 这样说吧. 如果你不用lazy标记,那么你对于一个区间更新的话是要对其所有的子区间都更新一次,但如果用 ...

  7. HDU 1698 just a hook 线段树,区间定值,求和

    Just a Hook Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1 ...

  8. HDU 1698 Just a Hook 线段树+lazy-target 区间刷新

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  9. hdu - 1689 Just a Hook (线段树区间更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=1698 n个数初始每个数的价值为1,接下来有m个更新,每次x,y,z 把x,y区间的数的价值更新为z(1<= ...

随机推荐

  1. 第六周——分析Linux内核创建一个新进程的过程

    "万子恵 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 &q ...

  2. maven - Eclipse构建maven项目

    前面的博文已经介绍了如何安装maven,本文将记录如何在Eclipse下构建maven项目. 一.Eclipse maven插件安装 关于安装Eclipse maven插件,网上有很多方法,这里推荐一 ...

  3. 【转载】 Spark性能优化指南——基础篇

    转自:http://tech.meituan.com/spark-tuning-basic.html?from=timeline 前言 开发调优 调优概述 原则一:避免创建重复的RDD 原则二:尽可能 ...

  4. linux sed的使用

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理, 可以将数据行进行替换.删除.新增.选取等特定工作. sed本质上是一个编辑器,但是它是非交互式的,这点与VIM不同:同时 ...

  5. 创建SO bapi

    转自http://blog.sina.com.cn/s/blog_1647b3eff0102wi32.html 1.创建销售订单使用的BAPI BAPI_SALESORDER_CREATEFROMDA ...

  6. iOS 的主要框架

    框架:是一个目录,这个目录包含了共享库,访问共享库里代码的头文件,和其他的图片和声音的资源文件.一个共享库定义的方法或函数可以被应用程序调用. 每个框架对于 iOS 系统里的一层,每层建立在它下面层的 ...

  7. rpm 软件管理

    rpm包 安装,查询,卸载,升级,校验数据库的重建等工作 1.安装rpm -i /PATH/TO/PACKAGE_FILE -h: 以#显示进度:每个#表示2%;  -v: 显示详细过程 -vv: 更 ...

  8. Android——黑名单

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  9. windows 下 webstorm 使用SVN

    1.安装了webstorm之后,用了很久都没有配置SVN 现在想配置svn,结果发现一般的svn程序不好用. 经指导,发现需要安装一个专用于webstorm的SVN 2.在file->setti ...

  10. matchesSelector 匹配选择器表达式sizzle的实现

    Sizzle.matchesSelector = function( node, expr ) {     return Sizzle( expr, null, null, [node] ).leng ...