Luogu P3031 高于中位数】的更多相关文章

定义序列\(x_i = f([H_i >=x])\;\;\;\;其中f(0) = -1,f(1) = 1\),那么区间[i,j]满足条件当且仅当sum_j-sum_{i-1} > 0,即sum_j>sum_{i-1} 设\(g_d表示\sum_{i-1}^{n} [sum_i=d] , pre_d表示在d前面满足sum[i]<sum[d]的i的个数\) 考虑已求出\(g_{1..k-1} , pre_{1..k-1}\),现在要求\(pre_k\) 若\(sum_j > su…
链接:https://www.luogu.org/problemnew/show/P3031 题面: 题目描述 Farmer John has lined up his N (1 <= N <= 100,000) cows in a row to measure their heights; cow i has height H_i (1 <= H_i <= 1,000,000,000) nanometers--FJ believes in precise measurements…
传送门 要求有多少个长度为奇数的区间满足某个数为区间中位数 这样的区间,大于中位数的数个数 等于 小于中位数的数个数 用类似于前缀和的方法,设\(X_i\)为\(i\)和数\(b\)形成的区间内,大于\(b\)的数个数减去小于\(b\)的数个数的值,每次从前面那个位置转移过来,加上这个位置的贡献救星 最后用两个桶统计\(b\)左边和右边的\(X_i\)为某个值的个数,分别记为\(l_i\ r_i\),然后答案为\(\sum_{i,j}l_ir_j\ (i+j==0)\) 注意负下标处理和两个初值…
题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前序列的中位数 中位数是指将一个序列按照从小到大排序后处在中间位置的数.(若序列长度为偶数,则指处在中间位置的两个数中较小的那个) 例1:1 2 13 14 15 16 中位数为13 例2:1 3 5 7 10 11 17 中位数为7 例3:1 1 1 2 3 中位数为1 输入输出格式 输入格式: 第一行为初始序列长度N.第二行为N个整数,…
平衡树板题 原题传送门 这道题要用Splay,我博客里有对Splay的详细介绍 每次加入一个数,把数插入平衡树中 并且要记录一共有多少个数 每次查询就查询平衡树中第(总数-1)/2+1个数 十分暴力 #include <bits/stdc++.h> #define N 110005 #define root tree[0].ch[1] using namespace std; inline int read() { register int x=0,f=1;register char ch=g…
平衡树实际很简单的 以下讲解都以Luogu P3369 [模板]普通平衡树为例 我不会带指针的Splay,所以我就写非指针型的Splay Splay是基于二叉查找树(bst)实现的 什么是二叉查找树呢?就是一棵树呗,但是这棵树满足性质:一个节点的左孩子一定比它小,右孩子一定比它大 比如: 这就是一棵最基本二叉查找树 对于每次插入,它的期望复杂度大约是lognlogn级别的,但是存在极端情况,比如9999999 9999998 9999997.....1这种数据,会直接被卡成n^2级别 在这种情况…
<!DOCTYPE html><head> <meta charset="utf-8"> <title>锚点链接</title> <style> span {padding :0px 10px;color: aquamarine;} p{font-family: "微软雅黑";font-size: 18px;line-height: 2em;;text-indent: 2em;} img{bor…
Luogu P1168 Luogu P1801 UVA 501(洛谷Remote Judge) 前置知识:堆.优先队列STL的使用 对顶堆 是一种在线维护第\(k\)小的算法. 其实就是开两个堆,一个是大根堆,一个是小根堆.两个堆的根相对. 下面借助题目P1168进行详细分析. P1168 题意很好理解,不多作分析. 显然当\(i=1\)时,中位数就是\(a[1]\),记为\(mid\). 我们可以使用对顶堆,把比\(mid\)小的存入大根堆,比mid大的存入小根堆. 当我们已经加入奇数个元素时…
Luogu P1627 中位数 先记录目标数的位置,并且把数组映射为: $$a[i]=\begin{cases}-1,a[i]<b\0,a[i]=b\1,a[i]>b\end{cases}$$ 然后分别求一个左边和右边的部分和,注意到下标可能为负,所以要数组整体向右偏移$n$. #include<bits/stdc++.h> #define N 100010 using namespace std; int n,b,pos; int a[N],sum[N],lsum[N*2],rs…
[luogu]P1168 中位数 题目描述 给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N + 1) / 2,输出A[1], A[3], …, A[2k - 1]的中位数.即前1,3,5,……个数的中位数. 输入输出格式 输入格式: 输入文件median.in的第1行为一个正整数N,表示了序列长度. 第2行包含N个非负整数A[i] (A[i] ≤ 10^9). 输出格式: 输出文件median.out包含(N + 1) / 2行,第i行为A[1], A[3], …, A[2…