【 问题描述】
有一天, 小 A 得到了一个长度为 n 的序列。
他把这个序列的所有连续子序列都列了出来, 并对每一个子序列
都求了其平均值, 然后他把这些平均值写在纸上, 并对它们进行排序,
最后他报出了第 k 小的平均值。
你要做的就是模仿他的过程。
【 输入格式】
第一行两个整数 n,k, 意义如题中所述。
第二行 n 个正整数, 即为小 A 得到的序列。
【 输出格式】
一行一个实数, 表示第 k 小的平均值, 保留到小数点后 4 位。
【 样例输入输出】

ave.in ave.out
6 10
3 5 4 6 1 2
3.6667

【 数据范围与约定】
对于 40%的数据, n≤1000
对于 100%的数据, n≤100000, k≤n*(n+1)/2, 序列中的数≤109

/*
第 k 大不易直接求, 我们想到二分, 则原问题转变为求区间平均
值小于 x 的区间数量。 考虑把序列中的每个数减去 x, 则我们只需求
区间和小于 0 的区间数量。 我们对这个序列求前缀和, 则区间[l,r]和
小于 0 当且仅当 Sl-1> Sr , 答案即为前缀和序列 S 的逆序对数量, 使
用经典的归并排序即可解决, 时间复杂度 O(nlog2n)。
*/
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
typedef double db;
typedef long long ll;
const int N=;
const db eps=1e-;
db b[N],c[N];
int a[N];
ll ans=;
int n;
void solve(int l,int r){
if(l==r) return;
int M=l+r>>;
solve(l,M);solve(M+,r);
int i=l,j=M+,k=l-;
while(i<=M&&j<=r){
if(b[i]<b[j]) c[++k]=b[i++];
else c[++k]=b[j++],ans+=M-i+;
}
while(i<=M) c[++k]=b[i++];
while(j<=r) c[++k]=b[j++];
for(i=l;i<=r;i++) b[i]=c[i];
}
ll calc(db x){
b[]=;
for(int i=;i<=n;i++) b[i]=a[i]-x+b[i-];
ans=;
solve(,n);
return ans;
}
int main(){
freopen("ave.in","r",stdin);
freopen("ave.out","w",stdout);
int mx=,i;
db lb,rb,mid;
ll x;
scanf("%d %lld",&n,&x);
for(i=;i<=n;i++) scanf("%d",&a[i]),mx=max(mx,a[i]);
lb=;rb=mx;
while(rb-lb>eps){
mid=(lb+rb)/;
if(calc(mid)<x) lb=mid;
else rb=mid;
}
printf("%.4lf\n",lb);
return ;
}

LYDSY模拟赛day3 平均数的更多相关文章

  1. LYDSY模拟赛day3 序列

    NOIP不考可持久,弃坑

  2. LYDSY模拟赛day3 涂色游戏

    /* 非常好的题 */ #include <cstdio> #include <iostream> #include <cstdlib> #include < ...

  3. 【2018.10.20】noip模拟赛Day3 飞行时间

    今天模拟赛题目 纯考输入的傻逼题,用$scanf$用到思想僵化的我最终成功被$if$大法爆$0$了(这题只有一组$100$分数据). 输入后面那个$(+1/2)$很难$if$判断,所以我们要判两个字符 ...

  4. LYDSY模拟赛day9 2048

    /* 大模拟题,做的时候思路还是比较清晰的 */ #include<iostream> #include<cstdio> #include<string> #inc ...

  5. LYDSY模拟赛day1 String Master

    /* 暴力枚举两个后缀,计算最长能匹配多少前缀. 最优策略一定是贪心改掉前 k 个失配的字符. 时间复杂度 O(n3). */ #include<cstdio> ],b[]; int ma ...

  6. LYDSY模拟赛day1 Tourist Attractions

    /* 假设路径是 a − b − c − d,考虑枚举中间这条边 b − c,计 算有多少可行的 a 和 d. 设 degx 表示点 x 的度数,那么边 b − c 对答案的贡献为 (degb − 1 ...

  7. LYDSY模拟赛day1 Walk

    /* 依旧考虑新增 2^20 个点. i 只需要向 i 去掉某一位的 1 的点连边. 这样一来图的边数就被压缩到了 20 · 2^20 + 2n + m,然后 BFS 求出 1 到每个点的最短路即可. ...

  8. LYDSY模拟赛day2 Divisors

    /* 注意分解质因数,如果i是,那么n/i也是,这样就可以解决分解质因数的时间问题了 当 k ≥ 1 时,只有这些数的约数才会对答案产生贡献. 求出 m 个数的所有不超过 n 的约数,去重后统计即可. ...

  9. LYDSY模拟赛day2 Market

    /* orz claris,这个题的解法非常巧妙,首先是时间问题,其实这个问题只要离线处理一下就可以了,把物品和询问都按照时间排序,然后看一下能不能满足.然后,因为容量<=10^9,显然是不可能 ...

随机推荐

  1. F7控件

    //动态给F7加过滤 waf("#costSubject").wafPromptStandard("option", "filteritem" ...

  2. [IOS多线程]的使用:防止进行HTTP数据请求时,UI卡死。

    多线程的实现:NSThread 1.子线程的创建:两种方法 第一种: [NSThread detachNewThreadSelector:@selector(downloadImage:) toTar ...

  3. ofo走出校园观察:市场定位导致产品错位?

    Ofo和摩拜单车虽然同样都是做单车共享,但实际上两者在最初的市场定位是有明显的差异的,因此提供的产品方案也存在巨大的差异. 市场定位不同,导致产品方案的巨大差异 摩拜单车一开始就定位于开放市场,充分的 ...

  4. Android Studio目录结构浅析

    让我们来简单了解下Android Studio中不同目录(文件)的位置和用途.首先看下一个App的最简单的目录结构 OK,我们这么看,第一,把这么多文件先分成这么三块1. 编译系统(Gradle)2. ...

  5. UVA1210Sum of Consecutive Prime Numbers(素数打表 + 连续和)

    题目链接 题意:输入一个数n (2 <= n <= 10000) 有多少种方案可以把n写成若干个连续素数之和 打出10000之内的素数表,然后再打出每个可能得到的和的方案数的表 #incl ...

  6. HTML5学习预览

    HTML5中,新增了很多input元素的类型 email         email类型用于应该包含 e-mail 地址的输入域. url         url 类型用于应该包含 URL 地址的输入 ...

  7. 20145212《Java程序设计》实验报告二 《 Java面向对象程序设计》

    20145212 实验二< Java面向对象程序设计> 实验内容 单元测试 三种代码 伪代码 百分制转五分制: 如果成绩小于60,转成"不及格" 如果成绩在60与70之 ...

  8. Java数据结构——链表-单链表

    <1>链表 <2>引用和基本类型 <3>单链表 //================================================= // Fil ...

  9. C#--几个数据流Stream;StreamReader;StreamWriter;MemoryStream;BufferStream;

    命名空间:System.IO; Stream: 各种流的基类,不能时行查找操作,Position属性不能修改.读取时不Position不会自动移动, HttpWebRequest webreq = ( ...

  10. yourphp超出20记录自动删除

    $m = M('service_loginlog'); $res =$m->where('card_id='.$_SESSION['card_id'])->order('time desc ...