随笔分类 - 数据结构
摘要:题面:洛谷传送门 ####题目的算法要素:线段树&返回值为结构体的线段树 ####题目分析: 线段树的单点赋值+区间查询(查询区间内和最大的一段序列)。 因为某一段区间内和最大的一段序列是从它的小区间中合并出来的,需要不断与其他区间比较,且小区间内的最大序列不一定是大区间内的最大序列的一部分。 因此
阅读全文
摘要:一个很水的大根堆+贪心。 考虑将所有作业先按照截至日期升序排序,依次加入tot中,同时插入堆中,堆是在a意义下的大根堆。 若tot大于当前作业的截止日期,则取出之前以加入的作业中a最大的作业,进行加速,直到tot=当前作业的截止日期。 正确性很显然:如果不让截止日期小的作业尽量早地完成,则消耗很可能
阅读全文
摘要:七月思考过的问题,突然想起来了,就写出来 (才不是因为现在才发现自己写的树状数组里忘记说这个问题了呢!)(大雾)(好怪啊) (与其说是证明不如说是一个比较严谨且易懂的感性理解) (大概..还算是严谨吧?) 不会树状数组模板的走传送门:树状数组模板整理 前置设定:a[i]为原数列,c[i]为维护树状数
阅读全文
摘要:####一、 算法思路:和一维st表完全一致,都是倍增+dp ####二、与一维st表的区别: 维度不同,用矩阵合并 ####三、图像演示 ###预处理 大矩形由四种子矩阵合并而来 横向分割大矩阵 纵向分割大矩阵 ###查询 #总之就是由小矩阵合并到到大矩阵。 #include<bits/stdc+
阅读全文
摘要:算法基础:倍增+dp ##算法流程 (1)合并(预处理):把每一个大的区间分成两部分,求其最大值 (2)查询,求log(len),由一个从区间首端开始和一个由区间尾端开始的长度均为2^log(len)的两个区间中的最大值相互比较,求得最大值。 tips:f[i][j]代表以i为起点,长度为2^j的区
阅读全文
摘要:#include<bits/stdc++.h> using namespace std; const int N=2e5+10; int n,m,q,tot=0; int a[N],b[N]; int T[N],sum[N<<5],L[N<<5],R[N<<5]; int build(int l,i
阅读全文
摘要:树状数组基本性质: (1)C[i] = A[i - 2k+1] + A[i - 2k+2] + ... + A[i]; //k为i的二进制中从最低位到高位连续零的长度 (2)SUMi = C[i] + C[i-2k1] + C[(i - 2k1) - 2k2] + .....; (3)A[i] 包含
阅读全文
摘要:#include<cstdio> using namespace std; int const maxn = 1e6; int n, m; long long sum[4 * maxn + 5], input[maxn+5], add[maxn * 4 + 5]; inline void build
阅读全文

浙公网安备 33010602011771号