ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

线段树

2022-07-26 23:32:26  阅读:146  来源: 互联网

标签:输出 数列 包含 线段 整数 区间


线段树可以用于解决区间问题

P3372 【模板】线段树 1

题目描述

如题,已知一个数列,你需要进行下面两种操作:

  1. 将某区间每一个数加上 kk。
  2. 求出某区间每一个数的和。

输入格式

第一行包含两个整数 n, mn,m,分别表示该数列数字的个数和操作的总个数。

第二行包含 nn 个用空格分隔的整数,其中第 ii 个数字表示数列第 ii 项的初始值。

接下来 mm 行每行包含 33 或 44 个整数,表示一个操作,具体如下:

  1. 1 x y k:将区间 [x, y][x,y] 内每个数加上 kk。
  2. 2 x y:输出区间 [x, y][x,y] 内每个数的和。

输出格式

输出包含若干行整数,即为所有操作 2 的结果。

输入输出样例

输入 #1

10 3
0 2 6
1 1 8
0 5 7
输出 #1

11

8

20
【思路】
本题让我们做到区间查询以及区间求和
1.建造树

建树的过程类似于二分

在建树以及后面的过程中一定要注意(x<<1)和(x<<1|1),  ','的优先级大于‘<<’,所以在写代码时一定不能忘了加括号


2.区间求和

add是懒人标记,可以生动形象的理解为:在过年的时候,作为孩子的你收到了长辈们的压岁钱,但是,通常压岁钱不会在自己手里,而是会在爸妈手里(父节点),会等到一定时候在全部给你(子节点)。

标**的两行可以通过画图理解

3.区间查询

注意数据大小



 

标签:输出,数列,包含,线段,整数,区间
来源: https://www.cnblogs.com/pattont/p/16523078.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有