线段树
单点修改区间查询
区间和
给定长度为$N$的数列$A$,以及$M$条指令,每条指令可能是以下两种之一:
1 x y
,查询区间$[x,y]$ 中的最大连续子段和2 x y
,把$A[x]$改成 $y$。
对于每个查询指令,输出一个整数表示答案。
输入格式
1 |
|
区间最大值
给定一个正整数数列$a_1,a_2,…,a_n$,每一个数都在 $0 \sim p-1$ 之间。
可以对这列数进行两种操作:
- 添加操作:向序列后添加一个数,序列长度变成 $n+1$;
- 询问操作:询问这个序列中最后$L$个数中最大的数是多少。
程序运行的最开始,整数序列为空。
一共要对整数序列进行$m$次操作。
写一个程序,读入操作的序列,并输出询问操作的答案
1 |
|
区间gcd
给定一个长度为 N的数列 A,以及 M 条指令,每条指令可能是以下两种之一:
C l r d
,表示把$ A[l],A[l+1],…,A[r] $都加上 。Q l r
,表示询问$ A[l],A[l+1],…,A[r] $的最大公约数(GCD)。
对于每个询问,输出一个整数表示答案。
1 |
|
区间修改区间查询(懒标记)
区间和(区间加)
给定一个长度为 N的数列 A,以及 M 条指令,每条指令可能是以下两种之一:
C l r d
,表示把 $A[l],A[l+1],…,A[r] $都加上 d。Q l r
,表示询问数列中第 $l\sim r$个数的和。
对于每个询问,输出一个整数表示答案。
1 |
|
区间和(区间乘和加)
老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成。
有长为 N 的数列,不妨设为 $a_1,a_2,…,a_N$。
有如下三种操作形式:
- 把数列中的一段数全部乘一个值;
- 把数列中的一段数全部加一个值;
- 询问数列中的一段数的和,由于答案可能很大,你只需输出这个数模 P的值。
1 |
|
应用
1.区间和
左右子区间相加即可
2.区间最大数
左右区间最大数取max
3.区间最大子段和
左区间左端点开始的最大子段和 右区间右端点开始的最大子段和 左区间右端点开始的最大子段和+右区间左端点开始的最大子段和 三者取max
- 標題: 线段树
- 作者: sdjasj
- 撰寫于: 2023-02-01 16:38:19
- 更新于: 2023-02-01 17:49:13
- 連結: https://redefine.ohevan.com/2023/02/01/线段树/
- 版權宣告: 本作品采用 CC BY-NC-SA 4.0 进行许可。
留言