题目链接:

平均数

基准时间限制:4 秒 空间限制:131072 KB 分值: 80
LYK有一个长度为n的序列a。

他最近在研究平均数。
他甚至想知道所有区间的平均数,但是区间数目实在太多了。
为了方便起见,你只要告诉他所有区间(n*(n+1)/2个区间)中第k大的平均数就行了。

Input
第一行两个数n,k(1<=n<=100000,1<=k<=n*(n+1)/2)。
接下来一行n个数表示LYK的区间(1<=ai<=100000)。
Output
一行表示第k大的平均数,误差不超过1e-4就算正确。
Input示例
5 3
1 2 3 4 5
Output示例
4.000

题意:

思路:

二分答案,假设平均数为t,那么(sum[i]-sum[j])/(i-j)>=t;变形得sum[i]-t*i>=sum[j]-t*j(0<=j<i);temp[i]=sum[i]-t*i;即对于每个temp[i]统计有多少个temp[j]<=temp[i],每个i的和再和k比较就可以对t的取值进行二分了;

AC代码:
#include <bits/stdc++.h>
/*
#include <iostream>
#include <queue>
#include <cmath>
#include <map>
#include <cstring>
#include <algorithm>
#include <cstdio>
*/
using namespace std;
#define Riep(n) for(int i=1;i<=n;i++)
#define Riop(n) for(int i=0;i<n;i++)
#define Rjep(n) for(int j=1;j<=n;j++)
#define Rjop(n) for(int j=0;j<n;j++)
#define mst(ss,b) memset(ss,b,sizeof(ss));
typedef long long LL;
const LL mod=1e9+7;
const double PI=acos(-1.0);
const LL inf=1e18;
const int N=1e5+4;
int n,num[N];
LL k;
double sum[N],a[N],temp[N];
int lowbit(int x)
{return x&(-x);
}
void update(int x)
{while(x<=n){num[x]++;x+=lowbit(x);}
}
int query(int x)
{int ans=0;while(x>0){ans+=num[x];x-=lowbit(x);}return ans;
}
struct node
{double temp;int id,pos;
}po[N];
int cmp1(node x,node y)
{if(x.temp==y.temp)x.id<y.id;return x.temp<y.temp;
}
int cmp2(node x,node y)
{return x.id<y.id;
}
int check(double x)
{mst(num,0);LL ans=0;for(int i=1;i<=n;i++){po[i].temp=sum[i]-x*i;po[i].id=i;}sort(po+1,po+n+1,cmp1);for(int i=1;i<=n;i++)po[i].pos=i;//离散化sort(po+1,po+n+1,cmp2);for(int i=1;i<=n;i++){if(po[i].temp>=0)ans++;//还有0的情况;ans=ans+(LL)query(po[i].pos);update(po[i].pos);}if(ans>=k)return 1;return 0;
}
int main()
{cin>>n>>k;Riep(n){scanf("%lf",&a[i]);sum[i]=sum[i-1]+a[i];}double l=1,r=100000;while(abs(r-l)>=0.0001){double mid=(l+r)/2;if(check(mid))l=mid;else r=mid;}printf("%.8lf\n",l);return 0;
}

转载于:https://www.cnblogs.com/zhangchengc919/p/5543945.html

51nod 平均数(二分+树状数组)相关推荐

  1. 【bzoj4009】[HNOI2015]接水果 DFS序+树上倍增+整体二分+树状数组

    题目描述 给出一棵n个点的树,给定m条路径,每条路径有一个权值.q次询问求一个路径包含的所有给定路径中权值第k小的. 输入 第一行三个数 n和P 和Q,表示树的大小和盘子的个数和水果的个数. 接下来n ...

  2. jzoj4050-寻宝游戏【二分,树状数组,LCA】

    正题 题目链接:https://jzoj.net/senior/#contest/show/3017/1 题目大意 nnn个点的一棵树,mmm次操作,修改一个地方的宝藏. 每次操作后求拿完所以宝藏并回 ...

  3. bzoj4418 [Shoi2013]扇形面积并 扫描线+二分+树状数组

    Description 给定N个同心的扇形,求有多少面积,被至少K个扇形所覆盖. 对于100%的数据,1≤n≤105, 1≤m≤106,1≤k≤5000,1≤ri≤105,-m≤a1,a2≤m Sol ...

  4. ACM学习历程—51NOD 1685 第K大区间2(二分 树状数组 中位数)

    http://www.51nod.com/contest/problem.html#!problemId=1685 这是这次BSG白山极客挑战赛的E题. 这题可以二分答案t. 关键在于,对于一个t,如 ...

  5. 斜率小于0的连线数量 51Nod - 1107 (树状数组+离散化)

    二维平面上N个点之间共有C(n,2)条连线.求这C(n,2)条线中斜率小于0的线的数量. 二维平面上的一个点,根据对应的X Y坐标可以表示为(X,Y).例如:(2,3) (3,4) (1,5) (4, ...

  6. 【BZOJ2738】矩阵乘法 [整体二分][树状数组]

    矩阵乘法 Time Limit: 20 Sec  Memory Limit: 256 MB [Submit][Status][Discuss] Description 给你一个N*N的矩阵,不用算矩阵 ...

  7. HDU多校1 - 6756 Finding a MEX(分块+二分+树状数组)

    题目链接:点击查看 题目大意:给出一个 n 个点和 m 条边的无向图,每个点都有一个权值,现在需要执行 q 次操作,每次操作分为两种类型: 1 pos val :将第 pos 个点的权值修改为 val ...

  8. P3527 [POI2011]MET-Meteors 整体二分 + 树状数组

    洛谷 题意: 思路: 考虑整体二分前,一定要思考一下直接二分怎么做.显然对每个城市,当<pos<pos<pos的时候收集不够足够的陨石,>=pos>=pos>=po ...

  9. P3527-[POI2011]MET-Meteors【整体二分,树状数组】

    正题 题目链接:https://www.luogu.com.cn/problem/P3527 题目大意 mmm个格子形成的环,有nnn个集合,第iii个格子属于第oio_ioi​个集合,kkk次让环上 ...

最新文章

  1. hash hashcode变化_hashmap重写key的hashcode问题
  2. objective-c如何在linux下进入Modern模式
  3. 传统路由器被抛弃的理由—Vecloud
  4. Masonry自动布局详解一:基本用法
  5. 归并排序执行次数_肯定能懂的常见算法讲解(1)——排序算法
  6. JS之ES6扩展运算符三个点(...)用于剥离{} 获取属性值
  7. android DecorView的使用
  8. git安装、使用及常见报错
  9. 底大一级压死人!华为Mate 30 Pro主摄CMOS或将达到1/1.5英寸
  10. 微信小程序 选择微信自带的地址 用户授权选择了拒绝
  11. 华为太极magisk安装教程_Magisk字体包制作、字体包导入及导入失败等详细教程
  12. 1.本地Linux-安装OpenSIP及Yate客户端测试
  13. 最新解决“请在微信客户端中打开链接”的教程分享
  14. 58赶集基于 Docker 的自动化部署实践
  15. Python之计算π值
  16. 同为双摄像头,华为P9到底比iPhone 7 plus差在哪里?
  17. ctfhub中Git泄露-log
  18. 编写函数 int fac(int x)计算 x!的值。在主函数中输入 n 和 m 的值,通过调用函数 fac 计算m Cn 的值(要求分别用递归和非递归的方法编写函数 fac)
  19. PHP云招聘系统H5(源码+数据库脚本)
  20. matlab nargin的意思

热门文章

  1. 关于加载表格及模态框数据回填的Bug
  2. excel两个表格数据对比_教你如何使用excel快速对比多项数据
  3. [leetcode]14. 最长公共前缀
  4. 2018届c++B 格雷码;调手表(lowbit运算)
  5. 人群与网络:博弈论基本概念
  6. bzoj 3110: [Zjoi2013]K大数查询(树套树)
  7. HDU 5981 2016ICPC大连 K: Guess the number(推理)
  8. bzoj 2281: [Sdoi2011]黑白棋 bzoj 4550: 小奇的博弈(Nimk博弈+DP)
  9. linux系统下如何设置和修改文件和文件夹的读、写、执行权限
  10. [paper reading] GoogLeNet