Median

题目链接:

http://acm.split.hdu.edu.cn/showproblem.php?pid=5857

Description


There is a sorted sequence A of length n. Give you m queries, each one contains four integers, l1, r1, l2, r2. You should use the elements A[l1], A[l1+1] ... A[r1-1], A[r1] and A[l2], A[l2+1] ... A[r2-1], A[r2] to form a new sequence, and you need to find the median of the new sequence.

Input


First line contains a integer T, means the number of test cases. Each case begin with two integers n, m, means the length of the sequence and the number of queries. Each query contains two lines, first two integers l1, r1, next line two integers l2, r2, l1

Output


For each query, output one line, the median of the query sequence, the answer should be accurate to one decimal point.

Sample Input


1
4 2
1 2 3 4
1 2
2 4
1 1
2 2

Sample Output


2.0
1.5

Source


2016 Multi-University Training Contest 10


##题意:

给出一个有序的数列.
求由 A[l1]~A[r1] 与 A[l2]~A[r2] 组成的新序列的中位数.


##题解:

中位数:排序后中间位置的数,偶数个时为中间两个的平均值.
由于序列是有序的,可以分情况找到新序列的中位数的下标.
注意细节的处理.


##代码:
``` cpp
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define eps 1e-8
#define maxn 101000
#define mod 100000007
#define inf 0x3f3f3f3f
#define mid(a,b) ((a+b)>>1)
#define IN freopen("in.txt","r",stdin);
using namespace std;

int n, m;

LL num[maxn];

LL query1(int l1,int r1,int l2,int r2, int aim) {

if(l1+aim-1 < l2) return num[l1+aim-1];

else if(aim > (l2-l1)+2(r1-l2+1)) {

int pos = aim - ((l2-l1)+2
(r1-l2+1));

return num[r1+pos];

} else {

aim -= (l2-l1);

int pos = aim / 2;

if(aim % 2) return num[l2+pos+1-1];

else return num[l2+pos-1];

}

}

LL query2(int l1,int r1,int l2,int r2, int aim) {

if(l1+aim-1 <= r1) return num[l1+aim-1];

aim -= (r1-l1+1);

return num[l2+aim-1];

}

int main(int argc, char const *argv[])

{

//IN;

int t; cin >> t;
while(t--)
{
scanf("%d %d", &n, &m);
for(int i=1; i<=n; i++) {
scanf("%lld", &num[i]);
} while(m--) {
int L1,L2,R1,R2;
int l1,r1; scanf("%d %d", &L1, &R1);
int l2,r2; scanf("%d %d", &L2, &R2);
l1 = min(L1,L2); l2 = max(L1,L2);
r1 = min(R1,R2); r2 = max(R1,R2); int tol = (r1-l1+1) + (r2-l2+1); if(r1 < l2) {
if(tol & 1) {
printf("%lld.0\n", query2(l1,r1,l2,r2, (tol+1)/2));
} else {
LL ans = query2(l1,r1,l2,r2, (tol+1)/2) + query2(l1,r1,l2,r2, (tol+1)/2+1);
printf("%lld", ans/2);
if(ans % 2) printf(".5\n");
else printf(".0\n");
}
}
else {
if(tol & 1) {
printf("%lld.0\n", query1(l1,r1,l2,r2, (tol+1)/2));
} else {
LL ans = query1(l1,r1,l2,r2, (tol+1)/2) + query1(l1,r1,l2,r2, (tol+1)/2+1);
printf("%lld", ans/2);
if(ans % 2) printf(".5\n");
else printf(".0\n");
}
}
}
} return 0;

}

HDU 5857 Median (推导)的更多相关文章

  1. HDU 5857 Median

    因为原序列是排列好了的,那么只要看一下给出的两个区间相交的情况,然后分类讨论一下,O(1)输出. #pragma comment(linker, "/STACK:1024000000,102 ...

  2. HDU 2685 GCD推导

    求$(a^n-1,a^m-1) \mod k$,自己手推,或者直接引用结论$(a^n-1,a^m-1) \equiv a^{(n,m)}-1 \mod k$ /** @Date : 2017-09-2 ...

  3. [ An Ac a Day ^_^ ] hdu 4565 数学推导+矩阵快速幂

    从今天开始就有各站网络赛了 今天是ccpc全国赛的网络赛 希望一切顺利 可以去一次吉大 希望还能去一次大连 题意: 很明确是让你求Sn=[a+sqrt(b)^n]%m 思路: 一开始以为是水题 暴力了 ...

  4. hdu 3648 Median Filter (树状数组)

    Median Filter Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  5. [hdu 2298] 物理推导+二分答案

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2298 #include<bits/stdc++.h> using namespace st ...

  6. HDU 5312(数学推导+技巧)

    首先说一下.N*(N-1)/2为三角形数,随意一个自然数都最多可由三个三角形数表示. 对于,对于给定的要求值 V, 那么其一组解可表示为 V = 6*(K个三角形数的和)+K: 即随意由k个数组成的解 ...

  7. HDU5857 Median 模拟

    Median HDU - 5857 There is a sorted sequence A of length n. Give you m queries, each one contains fo ...

  8. hdu 3282 Running Median

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3282 Running Median Description For this problem, you ...

  9. HDU 5734 Acperience (推导)

    Acperience 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5734 Description Deep neural networks (DN ...

随机推荐

  1. Python3 学习第九弹: 模块学习二之文件管理模块

    os模块 提供访问操作系统的接口 1> name 获得当前操作系统 其中 'nt' 是 windows 'posix' 是 linux 2> environ 获得当前系统的环境变量的字典, ...

  2. Centos 6.5LAMP服务器(Apache+PHP+MySQL)的搭建

    1.首先看下你的防火墙是否处于开启状态,如果是开启状态,按照如下方法来配置你的防火墙(如果你在安装虚拟机时就没有开启过防火墙,那么这一步就省略了): 1.配置防火墙,开启80端口.3306端口 vi ...

  3. HDU 1158 Employment Planning

    又一次看题解. 万事开头难,我想DP也是这样的. 呵呵,不过还是有进步的. 比如说我一开始也是打算用dp[i][j]表示第i个月份雇j个员工的最低花费,不过后面的思路就完全错了.. 不过这里还有个问题 ...

  4. 51nod1204 Parity

    如果sm[j]和sm[i]奇偶性相同,那么(i+1,j)个数为偶数如果奇偶性相同看成是朋友,不同的看成是敌人,那么就跟bzoj1370的做法差不多了. 如果奇偶性相同,就将x和y合并,x+n,y+n合 ...

  5. Struts2+Uploadify文件上传使用详解

    Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.不过官方提供的实例是php版本的,本文将详细介绍Uploadify在java中的使用,您也可以点击下面的链接进行演示或下 ...

  6. HDU 1018 Big Number (阶乘位数)

    题意: 给一个数n,返回该数的阶乘结果是一个多少位(十进制位)的整数. 思路: 用对数log来实现. 举个例子 一个三位数n 满足102 <= n < 103: 那么它的位数w 满足 w ...

  7. 【原创】牛顿法和拟牛顿法 -- BFGS, L-BFGS, OWL-QN

    数据.特征和数值优化算法是机器学习的核心,而牛顿法及其改良(拟牛顿法)是机器最常用的一类数字优化算法,今天就从牛顿法开始,介绍几个拟牛顿法算法.本博文只介绍算法的思想,具体的数学推导过程不做介绍. 1 ...

  8. 文件IO一些注意的地方

    两个各自独立的进程各自打开同一个文件,则每个进程都有各自的文件表项.这是因为每个进程都有它自己对该文件的当前偏移量.但是对一个给定的文件只有一个v节点表项.lseek()只修改文件表项中的当前文件偏移 ...

  9. sound tips

    ASaudio&SoundAS 两个开源项目阅读: ASaudio&SoundAS 都是比较小巧的声音控制,但似乎都不能直接拿到项目只直接使用. ASaudio ASaudio的Tra ...

  10. 一:AndEngine的小例子

    首先导入架包,下载:http://download.csdn.net/detail/duancanmeng/4060082 lib文件夹中 像我们写android程序entends Activity一 ...