ci 的意思是在前lowbit 中元素的个数。 然后往前i个中的sum就是小于等于这个i的个数 这个数的位置-小于等于这个i的个数 就是前面大于这个数的个数 小于等于这个数的个数肯定比 这个数的位置要小。 1 #include<iostream> 2 #include<cstdio> 3 #incl ...
分类:
编程语言 时间:
2019-01-25 13:03:14
阅读次数:
175
sum[i]是1-i所有1的和,而i-sum[a[i]]就是在a[i]后面的数,即在i之前出现,却比他大的数。1是加在a[i]上,即i实际应该放的位置。而c[i]是为sum做准备的 1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> ...
分类:
编程语言 时间:
2019-01-22 19:11:25
阅读次数:
215
定义:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i<j的有序对。 解决:利用归并排序 时间复杂度O(nlogn) ...
分类:
其他好文 时间:
2019-01-21 20:06:23
阅读次数:
175
emmm 显然的考虑影响 后面比x小的 前面比x大的 还要单点修改 只有树套树了。 暴力无脑线段树套fhq 会TLE到80pts 单点修改,区间查询 树状数组套动态开点线段树显然更优啊 2781ms ...
分类:
其他好文 时间:
2019-01-20 20:58:36
阅读次数:
205
DP常用优化 一.前缀和优化 当遇到类似:$f[i] = \sum_{j = k}^{i} g[j]$的转移时,可以通过预处理出$g[i]$的前缀和$s[i]$,将$O(n)$的求和转换为$O(1)?$的操作。 "[HAOI2009]逆序对数列" "[HAOI2008]木棍分割" 二分答案+dp " ...
分类:
其他好文 时间:
2019-01-20 18:00:47
阅读次数:
379
题目 "P1975 [国家集训队]排队" 做法 逆序对的题当然想办法用cdq做 交换数列的位置好像不好处理,加个时间轴,把交换操作换成:删、删、加、加(位置可变换) 删的贡献系数为$( 1)$,加的贡献系数为$(1)$,然后丢到树状数组也是根据这个系数,这样可以保证不重复统计同一位置 位置为第一维, ...
分类:
其他好文 时间:
2019-01-19 21:09:10
阅读次数:
204
链接:https://oj.ahstu.cc/JudgeOnline/problem.php?id=2021 题意: 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。 现在,给你一个N个元素的序列,请你判断 ...
分类:
其他好文 时间:
2019-01-18 13:34:04
阅读次数:
209
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define LL long long using namespace std; const int MAXSIZE = 100100; int b[ ...
分类:
其他好文 时间:
2019-01-17 11:38:56
阅读次数:
214
题目 "P1393 动态逆序对" 做题前写篇博客是个好方法 做法 题目规定仅有删除,给每个位置标个号,逆序对+时间轴,显然这是个三维偏序 很久没做过$cdq$了,就当模板题讲一下: 按删除的先后顺序为关键字排序分治,然后在$cdq$中按位置排序,同时前部分删除的时间 include include ...
分类:
其他好文 时间:
2019-01-17 00:40:09
阅读次数:
340