线段树
文章平均质量分 52
1
zzqwtc
blog dot zzqwtc dot com
展开
-
AcWing243. 一个简单的整数问题2 (区间修改 + 区间查询)
AcWing243. 一个简单的整数问题2给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一:1、“C l r d”,表示把 A[l],A[l+1],…,A[r] 都加上 d。2、“Q l r”,表示询问 数列中第 l~r 个数的和。对于每个询问,输出一个整数表示答案。输入格式第一行两个整数N,M。第二行N个整数A[i]。接下来M行表示M条指令,每条指令的格式如题目描述所示。输出格式对于每个询问,输出一个整数表示答案。每个答案占一行。数据范围1≤N,M≤105,1≤原创 2021-01-26 20:54:35 · 2589 阅读 · 0 评论 -
AcWing. 246 区间最大公约数 (区间修改 + 区间查询)
AcWing. 246区间最大公约数gcd(a1,a2...,an)gcd(a_{1},a_{2}...,a_{n})gcd(a1,a2...,an) = gcd(a1,a2−a1...,an−an−1)gcd(a_{1},a_{2}-a_{1}...,a_{n}-a{n-1})gcd(a1,a2−a1...,an−an−1)给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一:1、“C l r d”,表示把 A[l],A[l+1],…,A[r] 都加上 d。2、“Q l原创 2021-01-26 20:53:03 · 2643 阅读 · 0 评论 -
AcWing. 245 你能回答这些问题吗 (区间查询 + 单点修改)
AcWing. 245你能回答这些问题吗(最大连续区间子段和)给定长度为N的数列A,以及M条指令,每条指令可能是以下两种之一:1、“1 x y”,查询区间 [x,y] 中的最大连续子段和,即 maxx≤l≤r≤ymax_{x \leq l \leq r \leq y}maxx≤l≤r≤y∑i=lrA[i]{\sum^{r}_{i = l}A[i]}∑i=lrA[i]。2、“2 x y”,把 A[x] 改成 y。对于每个查询指令,输出一个整数表示答案。输入格式第一行两个整数N,M。第二行N个原创 2021-01-26 20:51:27 · 2558 阅读 · 0 评论 -
AcWing. 1275 最大数 (单点修改 + 区间查询)
AcWing. 1275最大数给定一个正整数数列 a1,a2,…,an,每一个数都在 0∼p−1 之间。可以对这列数进行两种操作:添加操作:向序列后添加一个数,序列长度变成 n+1;询问操作:询问这个序列中最后 L 个数中最大的数是多少。程序运行的最开始,整数序列为空。写一个程序,读入操作的序列,并输出询问操作的答案。输入格式第一行有两个正整数 m,p,意义如题目描述;接下来 m 行,每一行表示一个操作。如果该行的内容是 Q L,则表示这个操作是询问序列中最后 L 个数的最大数是多少原创 2021-01-26 16:25:39 · 2878 阅读 · 0 评论 -
线段树基本操作
线段树基本操作query()int query(int u, int l, int r) { //查询操作 if (tr[u].l >= l && tr[u].r <= r)return tr[u].v; //树中节点已经被完全包含在[l,r]中 int mid = tr[u].l + tr[u].r >> 1; int v = 0; if(l > mid)return query(u << 1 | 1,l,r); else i原创 2021-01-26 16:20:16 · 2463 阅读 · 0 评论 -
AcWing 243. 一个简单的整数问题2(树状数组实现区间修改+区间查询)
AcWing243. 一个简单的整数问题2(树状数组实现区间修改+区间查询)a1+a2+a3+a…axa_{1}+a_{2}+a_{3}+a\dots a_{x}a1+a2+a3+a…ax ====== ∑i=1x∑j=1ibj\sum^{x}_{i = 1}\sum^{i}_{j = 1}b_{j}∑i=1x∑j=1ibj给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一:1、“C l r d”,表示把 A[l],A[l+1],…,A[r] 都加上 d。2、“Q l原创 2021-01-25 00:13:55 · 2328 阅读 · 0 评论 -
AcWing1277. 维护序列 (区间修改 + 区间查询)
线段树基本操作query()int query(int u, int l, int r) { //查询操作 if (tr[u].l >= l && tr[u].r <= r)return tr[u].v; //树中节点已经被完全包含在[l,r]中 int mid = tr[u].l + tr[u].r >> 1; int v = 0; if(l > mid)return query(u << 1 | 1,l,r); else i原创 2020-10-23 23:38:47 · 1863 阅读 · 0 评论