算法模板——线段树3(区间覆盖值+区间求和)
时间:2022-05-07
本文章向大家介绍算法模板——线段树3(区间覆盖值+区间求和),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
实现功能——1:区间覆盖值;2:区间求和
相比直接的区间加,这个要注重顺序,因为操作有顺序之分。所以这里面的tag应该有个pushup操作(本程序中的ext)
1 var
2 i,j,k,l,m,n,a1,a2,a3,a4:longint;
3 a,b,d:array[0..100000] of longint;
4 function max(x,y:longint):longint;inline;
5 begin
6 if x>y then max:=x else max:=y;
7 end;
8 function min(x,y:longint):longint;inline;
9 begin
10 if x<y then min:=x else min:=y;
11 end;
12 procedure ext(z,x,y:longint);inline;
13 begin
14 if d[z]=0 then exit;
15 a[z]:=b[z]*(y-x+1);
16 if x<>y then
17 begin
18 b[z*2]:=b[z];d[z*2]:=1;
19 b[z*2+1]:=b[z];d[z*2+1]:=1;
20 end;
21 b[z]:=0;d[z]:=0;
22 end;
23 function op(z,x,y,l,r,p:longint):longint;inline;
24 var a3,a4:longint;
25 begin
26 if l>r then exit(0);
27 if (x=l) and (y=r) then
28 begin
29 if d[z]=1 then a[z]:=b[z]*(r-l+1);
30 d[z]:=1;b[z]:=p;
31 exit(p*(r-l+1)-a[z]);
32 end;
33 ext(z,x,y);
34 a3:=op(z*2,x,(x+y) div 2,l,min(r,(x+y) div 2),p);
35 a4:=op(z*2+1,(x+y) div 2+1,y,max((x+y) div 2+1,l),r,p);
36 a[z]:=a[z]+a3+a4;
37 exit(a3+a4);
38 end;
39 function cal(z,x,y,l,r:longint):longint;inline;
40 begin
41 if l>r then exit(0);
42 if d[z]=1 then exit(b[z]*(r-l+1));
43 if (x=l) and (y=r) then exit(a[z]);
44 exit(cal(z*2,x,(x+y) div 2,l,min(r,(x+y) div 2))+cal(z*2+1,(x+y) div 2+1,y,max(l,(x+y) div 2+1),r));
45 end;
46 procedure built(z,x,y:longint);inline;
47 begin
48 if x=y then
49 read(a[z])
50 else
51 begin
52 built(z*2,x,(x+y) div 2);
53 built(z*2+1,(x+y) div 2+1,y);
54 a[z]:=a[z*2]+a[z*2+1];
55 end;
56 b[z]:=0;d[z]:=0;
57 end;
58 begin
59 readln(n,m);
60 built(1,1,n);
61 readln;
62 for i:=1 to m do
63 begin
64 read(j);
65 case j of
66 1:begin
67 readln(a1,a2,a3);
68 op(1,1,n,a1,a2,a3);
69 end;
70 2:begin
71 readln(a1,a2);
72 writeln(cal(1,1,n,a1,a2));
73 end;
74 else halt;
75 end;
76 end;
77 end.
78
- [认证授权] 5.OIDC(OpenId Connect)身份认证授权(扩展部分)
- [认证授权] 4.OIDC(OpenId Connect)身份认证授权(核心部分)
- [OIDC in Action] 1. 基于OIDC(OpenID Connect)的SSO
- [OIDC in Action] 2. 基于OIDC(OpenID Connect)的SSO(纯JS客户端)
- [认证授权] 2.OAuth2授权(续) & JWT(JSON Web Token)
- [Cake] 0.C#Make自动化构建-简介
- [认证授权] 3.基于OAuth2的认证(译)
- [Asp.Net Core] 1. IIS中的 Asp.Net Core 和 dotnet watch
- kafka数据迁移实践
- HDFS 2.x 磁盘间数据均衡的一种可行办法
- Batik渲染png图片异常的bug修复全程记录
- Web应用服务器安全:攻击、防护与检测
- 基于Go Packet实现网络数据包的捕获与分析
- 动态追踪技术(四):基于 Linux bcc/BPF 实现 Go 程序动态追踪
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- js数组方法,常用数组Api的基本使用
- java jsp实现网络考试系统(mysql)
- 实操:数据万象语音转文字
- python智能图片识别系统(图片切割、图片识别、区别标识)
- 【Kubernetes】部署 metrics-server 后无法使用 top 命令
- 使用java计算数组方差和标准差
- jzy3D从入门到弃坑_2 使用jzy3D0.9画2D散点图
- jzy3D从入门到弃坑_3 使用jzy3D0.9画2D散点图--多条线条
- maven安装和应用
- 论文研读-多目标自适应memetic算法
- 一起来学matlab-matlab学习笔记13函数 13_1 函数返回值
- 一起来学matlab-matlab学习笔记13函数 13_2 匿名函数
- 一起来学matlab-matlab学习笔记13函数 13_3 创建函数句柄
- matlab 单元数组和元胞数组
- matlab串联结构体,按属性创建含有元胞数组的结构体