思路:线段树,区间更新

  1 #include<iostream>
  2 #include<vector>
  3 #include<string>
  4 #include<cmath>
  5 #include<set>
  6 #include<algorithm>
  7 #include<cstdio>
  8 #include<map>
  9 #include<cstring>
 10 #include<list>
 11
 12 #define MAXSIZE 100010
 13
 14 using namespace std;
 15
 16 int tree[MAXSIZE*4];
 17 int lz[MAXSIZE*4];
 18 int N;
 19 int cnt = 0;    // 控制输出的打印格式
 20
 21
 22 void init()
 23 {
 24     memset(tree, 0, sizeof(tree));
 25     memset(lz, 0, sizeof(lz));
 26 }
 27
 28
 29 void build(int node, int l, int r)
 30 {
 31     if(l == r)
 32     {
 33         tree[node] = 0;
 34         return;
 35     }
 36     int mid = (l+r)/2;
 37     build(node*2, l, mid);
 38     build(node*2+1, mid+1, r);
 39
 40     tree[node] = tree[node*2] + tree[node*2+1];
 41 }
 42
 43
 44 void push_down(int node, int l, int r)
 45 {
 46     if(lz[node])
 47     {
 48         int mid = (l+r)/2;
 49         lz[node*2] += lz[node];
 50         lz[node*2+1] += lz[node];
 51         tree[node*2] += (mid-l+1)*lz[node];
 52         tree[node*2+1] += (r-mid)*lz[node];
 53         lz[node] = 0;
 54     }
 55 }
 56
 57
 58 void update_range(int node, int l, int r, int L, int R, int add)
 59 {
 60     if(l <= L && r >= R)
 61     {
 62         lz[node] += add;
 63         tree[node] += (R-L+1)*add;
 64         return;
 65     }
 66
 67     push_down(node, L, R);
 68     int mid = (L+R)/2;
 69     if(mid >= l)
 70         update_range(node*2, l, r, L, mid, add);
 71     if(mid < r)
 72         update_range(node*2+1, l, r, mid+1, R, add);
 73
 74     tree[node] = tree[node*2] + tree[node*2+1];
 75 }
 76
 77
 78 void print(int node, int l, int r)
 79 {
 80     if(l == r)
 81     {
 82         cnt++;
 83         printf("%d", tree[node]);
 84         if(cnt != N)
 85             printf(" ");
 86         else
 87             printf("\n");
 88         return;
 89     }
 90     push_down(node, l, r);    // 此处一定要记得push_down !
 91     int mid = (l+r)/2;
 92     print(node*2, l, mid);
 93     print(node*2+1, mid+1, r);
 94
 95 }
 96
 97 int main()
 98 {
 99
100     while(scanf("%d", &N) != EOF)
101     {
102         if(N == 0)
103             break;
104         init();
105         build(1, 1, N);
106         for(int i = 0; i < N; ++i)
107         {
108             int a, b;
109             scanf("%d%d", &a, &b);
110             update_range(1, a, b, 1, N, 1);
111         }
112         cnt = 0;
113         print(1, 1, N);
114     }
115
116     return 0;
117 }

转载于:https://www.cnblogs.com/FengZeng666/p/11457520.html

Color the ball HDU - 1556 (线段树)相关推荐

  1. POJ 2777 ZOJ 1610 HDU 1698 --线段树--区间更新

    直接将这3题 放一起了  今天在做线段树的东西 这3个都是区间更新的 查询方式互相不同 反正都可以放到一起吧 直接先上链接了 touch me touch me touch me 关于涉及到区间的修改 ...

  2. hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  3. HDU - 6183 Color it(动态开点线段树/树状数组套动态开点线段树)

    题目链接:点击查看 题目大意:给出一个二维平面坐标系,需要完成四种操作: 0:删除所有点 1 xycx\ y\ cx y c:在点 (x,y)(x,y)(x,y) 处添加颜色 ccc 2 xy1y2x ...

  4. poj 2777 AND hdu 5316 线段树

    区间染色问题,用线段树可以解决.颜色总类不多,故考虑用二进制数的每一位表示一种颜色,然后父节点的颜色就是孩子节点颜色"或"起来,加上lazy标记,轻松AC. poj 2777: 1 ...

  5. poj 2528 离散化+线段树 hdu 1698 线段树 线段树题目类型一:染色计数 外加离散化

    第一次听到离散化是今年省赛的时候,一道矩形并的题,很水,就两个矩形... 今天再去做线段树已经发现离散化忘得差不多了...水逼的悲哀啊... 先看简单点的hdu 1698 http://acm.hdu ...

  6. hdu 5367(线段树+区间合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5367 官方题解: 对于求"高山脉"长度,可以利用线段树.树节点中保存左高度连续长度 ...

  7. hdu 5266(线段树+LCA)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5266 解题思路: 考虑dfs序,通过在简单的证明可知L~R的LCA为L ~R 中dfs序较小的那个位置 ...

  8. hdu 5124(线段树区间更新+lazy思想)

    http://acm.hdu.edu.cn/showproblem.php?pid=5124 题意:区间覆盖次数问题. 解题思路:线段树水之. #include<iostream> #in ...

  9. HDU 4893 线段树

    比赛时太大意,斐波拉契数列开小了. 题目大意:1个序列,3种操作,改变序列某个数大小,将序列中连续的一段每个数都变成其最近的斐波拉契数,以及查询序列中某一段的数之和. 解题思路:维护add[]数组表示 ...

最新文章

  1. 匹配内容主要分为三部分,负载电容的匹配,驱动功率的调试,负性阻抗的测量。...
  2. SQL------Hint
  3. 编写函数,可以接收任意多个整数并输出其中的最大值和所有整数之和。
  4. STM32寄存器与输入捕获
  5. 文本右上角右下角添加文本
  6. Python(2.7)-元组(tuple)
  7. 最新数据!妇科类用药领域,中成药占比高
  8. 【NOIP2001】【codevs1039】数的划分
  9. python之requests模块
  10. 汽车加油问题(python)
  11. html有序列表标签圆点,什么是无序列表、有序列表 、定义列表?html列表标签学习笔记...
  12. 在服务器上离线下载并在线播放 Cloud Torrent
  13. vue 3 + mo.js 实现点赞粒子特效【实战】
  14. 自制滚动的天空,原来很简单,就差细节来人给做做
  15. 《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》论文翻译
  16. PacBio下机数据解读
  17. soul源码阅读 soul数据同步之nacos
  18. Pytorch DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ
  19. linux内核uuid生成器测试
  20. 美国新的州隐私和安全法律解释:你的企业准备好了吗?(二)

热门文章

  1. Codeforces Round #168 (Div. 2)---A. Lights Out
  2. PowerShell与Unix Shell对比:八大实例
  3. EditText图文混排
  4. redis+celery+django设置外网可访问
  5. psql: FATAL: role “appleyuchi” does not exist与修改默认密码
  6. EIGENVECTORS FROM EIGENVALUES论文结论举例验证
  7. namenode启动不了以及datanode启动不了的解决办法
  8. ubuntu linux下使用vscode切换python虚拟环境
  9. K-means算法在手写体数字图像数据上的使用示例-代码详解
  10. 1.11 多于空间维度的向量组