摘要:
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<sstream> #include<queue> #include<map> #include<vec 阅读全文
摘要:
注意:一切问题若去掉无用决策后程单调性,则可以使用单调数据结构求解。 洛谷模板题: #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<sstream> 阅读全文
摘要:
对顶栈: class MinStack { public: stack<int> st1; stack<int> stmin; MinStack() { } void push(int x) { st1.push(x); if(stmin.empty()||stmin.top()>=x) stmin 阅读全文
摘要:
1题目大意 https://www.acwing.com/problem/content/107/ 2解析 2.1 第一眼 其实这道题第一眼你会发现是行和列分别来讨论,所以我们最后要的信息其实是每一行,每一列的感兴趣的货摊个数是多少。 2.2简化问题 很多人到这里就开始没有思路——包括我,这个时候我 阅读全文
摘要:
1简介 为什么需要?原因很简单,当需要有大量的边去连时,用线段树优化可以直接用点连向区间,或从区间连向点,或从区间连向区间,如果普通连边,复杂度是不可比拟的。下面简单讲解一下线段树(ST)优化建图。 2讲解 2.1 两棵树 线段树优化建图需要两棵树:入树和出树,入树指被点或区间指向的树,连边时从结点 阅读全文
摘要:
1.next_permutation next_permutation(a+1,a+n+1) 用于求解a数组的下一个较大的排列。 prev_permutation则与之相反,求解下一个较小的排列。 函数参数均为数组起始坐标,和终止坐标,如果存在下一个排列,则返回1,否则返回0,同时把该数组变为下一个 阅读全文
摘要:
1位运算 位运算的运算速度较快 在状态压缩dp中,如果以2进制表示集合,位运算就是基于集合的操作。 关于位运算的一些题目需要用到位运算的一些性质 2性质 每个进制位的加减运算都可以独立进行 a&(b|c) = (a&b)|(a&c) a^(b|c)=(a ^ b) | (a ^ c) (a|b)|c 阅读全文
摘要:
1.定义 泛化物品是指该物品的价值与其体积存在一一对应的关系,即该物品的价值随着体积的变化而变化,是一种函数关系。 例如,在01背包中,最后的答案数组其实就是一个泛化物品。 2运算 2.1 泛化物品的并 有泛化物品$f,g$,他们的并是相同体积下价值的最大值。设f体积为fv,g体积为gv,把并后的泛 阅读全文
摘要:
1定义 最大子段和是指,对于一段数列来说,有区间$[l,r]$使得$a_i+a_{i+1}+...a_r$最大,这个最大的和被称为最大子段和。 扩展内容是求解最大子矩阵和。 2算法 2.1 朴素算法 通过枚举l和r,来枚举所有可能的情况,暴力计算l到r的所有和。 代码: for(int i=1;i< 阅读全文
摘要:
快速乘用于两个ll整数乘法取模可能溢出的情况。 原理:ull溢出相当于对$2^64$次方取模 需要注意的是,一个运算式用什么类型储存取决于这个运算式中的每一个变量的最大类型是什么。 代码: inline ll ksc(ll x,ll y,ll mod){ ll z=(ld)x/mod*y; ll r 阅读全文