[AtCoder ARC101D/ABC107D] Median of Medians】的更多相关文章

题目链接 题意:给n个数,求出所有子区间的中位数,组成另外一个序列,求出它的中位数 这里的中位数的定义是:将当前区间排序后,设区间长度为m,则中位数为第m/2+1个数 做法:二分+前缀和+树状数组维护 极其妙的一个做法. 效率$O(nlognlogA)$这里的A指的是原序列中的最大值 二分一下最后的中位数,然后将原序列中大于当前二分出来的值标为1,小于的标为-1,处理出前缀和. 那么只要一段区间的和大于0,那么这段区间的中位数就一定大于等于当前二分出来的值. 所以问题就变成了,求出当前这个序列的…
D - Median of Medians Time limit : 2sec / Memory limit : 1024MB Score : 700 pointsProblem Statement We will define the median of a sequence b of length M, as follows:     Let b' be the sequence obtained by sorting b in non-decreasing order. Then, the…
原文链接https://www.cnblogs.com/zhouzhendong/p/ARC101D.html 题目传送门 - ARC101D 题意 给定一个序列 A . 定义一个序列 A 的中位数为:给 A 排序,得到的第 $\left\lfloor\cfrac{i}{2}\right\rfloor+1$ 项的值. 序列 B 由序列 A 的所有连续子序列的中位数构成. 问序列 B 的中位数是多少. 序列中可能出现重复的数,$|A| \leq 10^5$ . 题解 注意这里说的“中位数”是题意里…
二分答案 然后前缀和+树状数组来判断这个答案是否大于等于数 如果我们对于一个查询,如果小于这个数令为1,大于这个数领为-1 将所有前缀和放在树状数组中,就可以查询所有sum_{l} < sum_{r}的组合 #include <assert.h> #include <algorithm> #include <bitset> #include <climits> #include <cmath> #include <cstdio>…
题面在这里! 这种题只能二分答案把qwwq,直接做根本做不了啊... 首先你需要知道如何通过 一个区间<=x的数有多少个 来判断x和这个区间中位数的关系. 很显然当数有至少 [L/2]+1 个(L是区间内数的个数)时,x>=该区间的中位数. 你肯定觉得这多简单啊?有啥子用? 第一,它可以转化成,区间内<=x的数比剩下的数多的时候,x>=该区间的中位数,于是就可以做二分里面套的部分. 具体的来说,就是我们二分到一个x的时候,希望知道有多少个区间的中位数<=x. 这个时候只需要把…
题目大意 定义一个从小到大的数列的中位数为第 $ \frac{n}{2}+1 $ 项.求一个序列的所有连续子序列的中位数的中位数. $ (n \leqslant 100000)$ 问题分析 由于\(n\)的范围较大,所以不可能把序列构造出来.我们不妨换个角度分析.我们设最后的序列总共有\(N=\frac{n(n-1)}{2}\)项. 若最终答案为\(x\),那么也就是说,有\(\frac{N}{2}+1\)项的中位数不大于\(x\).如果我们令原序列中小于等于\(x\)的数为\(1\),否则为\…
题目   点这里看题目. 分析   看到中位数,当然会想到二分答案.   考虑检查答案.自然,我们需要找出中位数小于二分值\(k\)的区间的个数.考虑构造一个\(b\): \[b_i=(-1)^{[a_i\ge k]} \]   可以发现,这个\(b\)满足,如果区间\([l,r]\)的中位数小于\(k\),则\(\sum_{i=l}^r b_i>0\).   现在检查仍然是\(O(n^2)\)的,过不了.考虑优化.   把\(b\)写成前缀和的形式:\(s_i=\sum_{j=1}^i b_j…
模的是这位神犇的代码:Atcoder AGC012F : Prefix Median 题意: 在动态中位数那道题上做了一些改动.给你一个序列a,可以将a重新任意排序,然后对于a序列构造出b序列. 假设a序列有2*n-1个元素,b序列有n个元素. 其中b[i]=Median(a[1],a[2],a[3]...a[2i-1]).求能够构造出多少个不同的b序列. 数据范围: 1<=N<=50,1<=ai<=2N-1 思路: 这道题真的是究极神题...虽然说代码实现比较简单,但是分析的过程…
C - Candles 题解 点燃的一定是连续的一段,枚举左端点即可 代码 #include <bits/stdc++.h> #define enter putchar('\n') #define space putchar(' ') #define pii pair<int,int> #define fi first #define se second #define mp make_pair #define MAXN 1000005 #define mo 999999137 #…
这场还好切出了D,rt应该能涨,然而这场的题有点毒瘤,700分的D没多少人切,更别说EF了.(暴打出题人)既然这样,干脆就水一篇博客,做个简单的比赛记录. C - Candles 这题是一道一眼题,花了大约30s看懂题意,然后就想到做法开始敲. 首先先把蜡烛的坐标从小到大排序,我们要点亮的蜡烛一定在一个区间里,因此若我们要点亮区间$ [i,i+k) $的蜡烛我们可以这么走:先走到蜡烛$ i $和$ i-k+1 $中较近的一根,然后再走向另一根,并把途径的蜡烛全部点亮.这样的花费是$ \min(|…