随笔分类 - 算法
摘要:求逆序对问题: 即例可以在数组{1,9,11,2,5,32,12}求有多少逆序对或者有序对。 我们可以转化为二维坐标系。 以数组的下标作为坐标的x轴,以数值作为坐标的y轴。 如下图 先按x轴排序,我们需要求在此点的左下方有多少点,即若现在为第k个点(xk,yk)那么求(1,k-1)之间有多少点x,y
阅读全文
摘要:问在x,y范围内Σyk=xDI(K)为多少? DI(K)定义为di>dj&&i<j ,K由dn....d2d1d0构成如DI(123) = 3(d2<d1,d2<d0,d1<d0)DI(253) = 2(d2<d0,d1<d0) 那么我们就数位dp一下,访问所有的数,h[cur][flag][lim
阅读全文
摘要:单点修改,区间查询 const int maxn = 500005 * 4; //线段树范围要开4倍 struct Tree { int l, r, sum, maxx; }; Tree node[maxn]; //node[maxn]为线段树处理数组 int a[maxn]; //a[maxn]为
阅读全文
摘要:#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct zzz { int t, nex; }e[500010 << 1]; int head[
阅读全文
摘要:皮克定理:S=a+b/2−1。 S表示多边形的面积 a表示多边形内的整数点 b表示多边形边界上的整数点。 求s的板子: int n; cin >> n; ll x0,y0,x1,y1,S = 0; cin >> x[1] >> y[1]; x0 = x[1]; y0 = y[1]; x1 = x[
阅读全文
摘要:置换群:G;置换群中置换个数:|G|;我们喜欢用 m 阶循环这种记号来表示 置换。m 阶循环:相邻元素可以直接到达,第 m 个位置可以到达第 1 个位置。例如:5 阶循环:(1 5 2 4 3),1->5->2->4->3->1…..,3->4->2->5->1->3…..前置技能还有:共轭类格式:
阅读全文
摘要:数位一般来说是求在一段范围内的满足某些条的数,假如说在[ri,le]的条件下满足一定条件的数的话,那么我们就可以采用差分的方法: 就是count = solve(le) - solve(ri-1);或者count = solve(le) - solve(ri) + check(ri); 即就是满足[
阅读全文

浙公网安备 33010602011771号