You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number ...
分类:
其他好文 时间:
2020-03-20 18:39:27
阅读次数:
72
【本文解决 区间修改/区间求和 的问题】 区间求和部分内容与上一篇内容相同,详见 "线段树点修改/区间求和" 已经知道了在O(logN)的复杂度内求N个连续数之和的做法 对于区间修改,最简单的办法就是进行多次点修改 但是多次点修改最后的时间复杂度为O(NlogN),还不及最普通的数组模拟O(n)效率 ...
分类:
其他好文 时间:
2020-03-19 19:00:09
阅读次数:
316
# 题意 给定长n的原数组,m个操作每个操作有两种 1)C l r d 将区间[l~r]加上d 2)Q l r 询问区间[l~r]的和 # 题解 操作有区间操作,所以需要延迟标记来记录区间的变化以达到O(logN)的复杂度 每个标记记录子节点的变化 每次分裂的时候要先将左右的标记更新 1 #incl ...
分类:
其他好文 时间:
2020-03-14 01:25:36
阅读次数:
53
支持区间修改的树状数组 原理 对于一个数组$a$,以及$a$的差分$c$,显然有$c[i]=a[i] a[i 1]$ 那么对于数组a的前缀和有 $\sum_{i=1}^n{a_i}=c[1]+(c[1]+c[2])+...(c[1]+c[2]+...+c[n])$ 进一步的: $\sum_{i=1} ...
分类:
编程语言 时间:
2020-03-04 09:31:30
阅读次数:
67
"原题" 该题涉及树状数组又一串操作: ① 区间修改 运用差分的思想,我们新建了一个数组b,初始化为零,对于每个指令"C l r d",我们只需将其转化为以下操作: 1.把b[l]加上d 2.再把b[r+1]减去d 做了这题,发现自己代码能力好差,找bug找了好久。 这题用了内联函数,发现也没快多少 ...
1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 const int MAXN=1e5+10; 5 struct node{int l,r,lazy,color;}t[MAXN*4]; 6 int L,R,C,n, ...
分类:
编程语言 时间:
2020-02-22 21:37:36
阅读次数:
67
https://www.luogu.com.cn/problem/P3368 上代码 #include<bits/stdc++.h> #define N 500005 #define endl '\n' #define _for(i,a,b) for(int i=a;i<b;i++) using n ...
分类:
其他好文 时间:
2020-02-22 00:33:02
阅读次数:
71
记录区间颜色分布,查询区间颜色种类
... ...
分类:
其他好文 时间:
2020-02-19 14:47:05
阅读次数:
79
其实分块是一种我认为比较简单的算法,可以看作一种暴力。。。 步入正题 分块的思想其实就是在进行区间修改时,将序列分成几块,如果要修改的区间有一个整块的话,将这一个整块做一个标记,其他部分就暴力修改就好了。 例题一 给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值。 先讲一下区间修改 这 ...
分类:
其他好文 时间:
2020-02-12 12:46:56
阅读次数:
67
//add,懒标记,给以当前节点为根的子树中的每一个点加上add(不包含根节点) // #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; typedef ...
分类:
其他好文 时间:
2020-02-11 09:22:13
阅读次数:
70