中位数+暴力——cf433C】的更多相关文章

/* 中位数到所有数的距离之和最小 因为只能改一个数,所以我们找一个数,将其改为和其相邻的数的中位数,使答案最小 先求一次原答案 把每个数相邻的数用vector存下来,然后排序找中位数,计算减小的量 */ #include<bits/stdc++.h> #include<vector> using namespace std; #define ll long long #define N 200005 vector<int> v[N]; int n,m,a[N]; in…
T1:Median   线性筛+桶+随机化(??什么鬼?).   首先,题解一句话秀到了我: 考虑输入如此诡异,其实可以看作随机数据   随机数据??   这就意味着分布均匀..   又考虑到w<=k<=n   可以用桶了.   中位数暴力算的话是排序后取中间.   但是时间明显不允许.只能\(O(n)\)过掉.所以要维护两个中位数指针(k%2==1当然就是一个了).   由于数据随机,分布均匀,所以可以直接跳桶.   笑死,我当时不信还把数据输了出去,发现有的相邻数据差了几百,就这还能直接跳…
老题了,附上黄学长链接一发,直接改改就AC了,http://hzwer.com/1216.html #include <cstdio> #include <iostream> #include <cstring> using namespace std; ; ],r[N*],a[N]; int n; int get(int x){ ; memset(sum,,sizeof(sum)); memset(l,,sizeof(l)); memset(r,,sizeof(r))…
http://www.lydsy.com/JudgeOnline/problem.php?id=1303 依旧是题解流,,,不看题解没法活,,,第一眼就是瞎搞,然后就是暴力,显然TLE..题解啊题解.. 这个特殊的技巧我不知道怎么抽象出来,,恩,,就说做法吧.. 首先读入的时候,小于b的赋值为-1,大于b的赋值为+1,并且用下标pos来索引b在数组的位置(1-n的排列哈-没看题的注意了) 然后用前缀和思想统计pos左边的前缀和和pos右边的前缀和,那么我们在统计的时候,只需要找(左边的一个前缀和…
这题真的很恶心,做了一天,最后问学长,才懂题意是什么,原来我一直都没读懂题.这我真的就无语了,你的题意多两句话会死啊?你测试样例多两个例子就不行啊?真蛋疼,题意都不懂,还做个shi? 题里说的是区间,所以必须是连续的,题里又说排好序后的中位数,所以也就相当于当输入1 4 2的时候,应该输出1 1 2, 前两个1能懂,但最后为什么是2呢?因为1个区间是他自己,还有1个区间是1 4 2,这里2是中位数,因为1 4 2排序之后是1 2 4,是中位数,所以1 4 2中的2就是中位数. 理解了这个,看下面…
题意:给定 n 个人,在 n 列,问你移动最少的距离,使得他们形成一个n*n的矩阵. 析:这个题本来是要找中位数的,但是有特殊情况,所以改成暴力了,时间也很短,就是从第一个能够放左角的位置开始找,取最大值,挺简单暴力. 我一个同学竟然读对了题,WA了,然后又重新读题,把题意读错了,就是AC了.... 代码如下: #include <cstdio> #include <string> #include <cstdlib> #include <cmath> #i…
题目描述 给定 n 个数 a1, a2, ..., an,求这 n 个数两两的差值(共 n(n−1) 2 个)的中位数. 输入格式: 第一行一个正整数 n,表示数的个数. 接下来一行 n 个正整数,分别为 a1, a2, ..., an. 输出格式: 一行一个数表示差值的中位数. 输入输出样例 输入样例#1: 3 4 2 6 输出样例#1: 2 题解 这里貌似没有数据范围.... 好吧 我补一下.. 30%数据保证O(n^2)能出解 100%数据n<=2000000,且结果是整数 首先,我们来看…
orz各位大佬,题解太强了,主席树,堆,线段树,splay,还有暴力,太巨了.所以我用的是fhq treap(好像更高级).算了. 反正都是平衡树,这道题就是动态求中位数,不会做的同学可以先做弱化版P1168 至于不会fhq treap的同学可以先点这里或上Patrickpwq大佬的博客 fhq treap做这道题涉及到insert(插入)与find(求第k小的数),至于k,就随add增大就好了,所以说fhq treap太好用了. insert的原理就不说了,至于find的原理我就简单讲一下,f…
Luogu1627 [CQOI2009]中位数 给出一个 \(n\) 的排列,统计该排列有多少个长度为奇数的连续子序列的中位数是 \(k\) \(n\leq10^5\) \(trick\) :因为不需要每个数的值,因此将原序列化为 \(a_i=\begin{cases}-1&(a_i<k)\\0&(a_i=k)\\1&(a_i>k)\end{cases}\) 因此原问题就变成了 给出一个 \(n\) 的排列,统计该排列有多少个包含 \(k\) 的连续子序列的和为 \(0…
谁能想到基本算法就这么难呢?我想去冲省选,但是迟迟在这些地方 花时间 算是提升自己的思维算了. 这道题呢 答案其实很简单每个数在a的位置和在b的位置之差的累加/2即是答案为什么呢?考虑当前数字 要向后面的那个数字换如果后面那个的目标不是当前位置呢?(自己可以把所有可能的情况画一下) 那么一定有 在当前数字的后面的目标在前面>=当前数字位置(抽屉原理)!(经过不断调整) 所以我们只需将这两个数字交换然后不断重复这个过程即是最优答案!(没有任何的浪费代价) 这个就很显然了吧,在a[(1+n)>&g…