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. 维护没有源代码,float改成double

    float f= 931340.31f; Console.WriteLine(f.ToString("#,###,##0.00")); 返回 931,340.30 ,float 1 ...

  2. UVa 409 Excuses, Excuses!

    哈哈,虽然是一道字符串水题,可是拿到一个1A还是很开心的! 题意就是给一些keywords(子串)和Excuse(母串),然后输出包含keywords最多的Excuse,如果相等的话,按任意顺序全部输 ...

  3. HDU 1158 Employment Planning

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

  4. [转] 判断html页是否滚动停止

    原文链接:http://www.phpernote.com/javascript-function/754.html 最近有个项目中遇到这样一个问题: 有一个用于展示数据的带滚动条的DIV块,业务需求 ...

  5. WEBUS2.0 In Action - 搜索操作指南 - (1)

    上一篇:WEBUS2.0 In Action - 索引操作指南(2) | 下一篇:WEBUS2.0 In Action - 搜索操作指南(2) 1. IQueriable中内置的搜索功能 在Webus ...

  6. Android 源代码自动编译packages/apps

    /*************************************************************************** * Android 源代码自动编译packag ...

  7. javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】(javamail API电子邮件实例)

    引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...

  8. 剑指offer—第三章高质量代码(o(1)时间删除链表节点)

    题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点,链表节点与函数的定义如下:struct ListNode{int m_nValue;ListNode* m_pValue ...

  9. Hadoop 学习总结之一:HDFS简介

    一.HDFS的基本概念 1.1.数据块(block) HDFS(Hadoop Distributed File System)默认的最基本的存储单位是64M的数据块. 和普通文件系统相同的是,HDFS ...

  10. 【模版消息】C#推送微信模版消息(Senparc.Weixin.MP.dll)

    定义的模版内容: {{first.DATA}} 商品名称:{{product.DATA}} 商品价格:{{price.DATA}} 购买时间:{{time.DATA}} {{remark.DATA}} ...