51nod 平均数(二分+树状数组)
题目链接:
平均数
第一行两个数n,k(1<=n<=100000,1<=k<=n*(n+1)/2)。 接下来一行n个数表示LYK的区间(1<=ai<=100000)。
一行表示第k大的平均数,误差不超过1e-4就算正确。
5 3 1 2 3 4 5
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 平均数(二分+树状数组)相关推荐
- 【bzoj4009】[HNOI2015]接水果 DFS序+树上倍增+整体二分+树状数组
题目描述 给出一棵n个点的树,给定m条路径,每条路径有一个权值.q次询问求一个路径包含的所有给定路径中权值第k小的. 输入 第一行三个数 n和P 和Q,表示树的大小和盘子的个数和水果的个数. 接下来n ...
- jzoj4050-寻宝游戏【二分,树状数组,LCA】
正题 题目链接:https://jzoj.net/senior/#contest/show/3017/1 题目大意 nnn个点的一棵树,mmm次操作,修改一个地方的宝藏. 每次操作后求拿完所以宝藏并回 ...
- bzoj4418 [Shoi2013]扇形面积并 扫描线+二分+树状数组
Description 给定N个同心的扇形,求有多少面积,被至少K个扇形所覆盖. 对于100%的数据,1≤n≤105, 1≤m≤106,1≤k≤5000,1≤ri≤105,-m≤a1,a2≤m Sol ...
- ACM学习历程—51NOD 1685 第K大区间2(二分 树状数组 中位数)
http://www.51nod.com/contest/problem.html#!problemId=1685 这是这次BSG白山极客挑战赛的E题. 这题可以二分答案t. 关键在于,对于一个t,如 ...
- 斜率小于0的连线数量 51Nod - 1107 (树状数组+离散化)
二维平面上N个点之间共有C(n,2)条连线.求这C(n,2)条线中斜率小于0的线的数量. 二维平面上的一个点,根据对应的X Y坐标可以表示为(X,Y).例如:(2,3) (3,4) (1,5) (4, ...
- 【BZOJ2738】矩阵乘法 [整体二分][树状数组]
矩阵乘法 Time Limit: 20 Sec Memory Limit: 256 MB [Submit][Status][Discuss] Description 给你一个N*N的矩阵,不用算矩阵 ...
- HDU多校1 - 6756 Finding a MEX(分块+二分+树状数组)
题目链接:点击查看 题目大意:给出一个 n 个点和 m 条边的无向图,每个点都有一个权值,现在需要执行 q 次操作,每次操作分为两种类型: 1 pos val :将第 pos 个点的权值修改为 val ...
- P3527 [POI2011]MET-Meteors 整体二分 + 树状数组
洛谷 题意: 思路: 考虑整体二分前,一定要思考一下直接二分怎么做.显然对每个城市,当<pos<pos<pos的时候收集不够足够的陨石,>=pos>=pos>=po ...
- P3527-[POI2011]MET-Meteors【整体二分,树状数组】
正题 题目链接:https://www.luogu.com.cn/problem/P3527 题目大意 mmm个格子形成的环,有nnn个集合,第iii个格子属于第oio_ioi个集合,kkk次让环上 ...
最新文章
- hash hashcode变化_hashmap重写key的hashcode问题
- objective-c如何在linux下进入Modern模式
- 传统路由器被抛弃的理由—Vecloud
- Masonry自动布局详解一:基本用法
- 归并排序执行次数_肯定能懂的常见算法讲解(1)——排序算法
- JS之ES6扩展运算符三个点(...)用于剥离{} 获取属性值
- android DecorView的使用
- git安装、使用及常见报错
- 底大一级压死人!华为Mate 30 Pro主摄CMOS或将达到1/1.5英寸
- 微信小程序 选择微信自带的地址 用户授权选择了拒绝
- 华为太极magisk安装教程_Magisk字体包制作、字体包导入及导入失败等详细教程
- 1.本地Linux-安装OpenSIP及Yate客户端测试
- 最新解决“请在微信客户端中打开链接”的教程分享
- 58赶集基于 Docker 的自动化部署实践
- Python之计算π值
- 同为双摄像头,华为P9到底比iPhone 7 plus差在哪里?
- ctfhub中Git泄露-log
- 编写函数 int fac(int x)计算 x!的值。在主函数中输入 n 和 m 的值,通过调用函数 fac 计算m Cn 的值(要求分别用递归和非递归的方法编写函数 fac)
- PHP云招聘系统H5(源码+数据库脚本)
- matlab nargin的意思
热门文章
- 关于加载表格及模态框数据回填的Bug
- excel两个表格数据对比_教你如何使用excel快速对比多项数据
- [leetcode]14. 最长公共前缀
- 2018届c++B 格雷码;调手表(lowbit运算)
- 人群与网络:博弈论基本概念
- bzoj 3110: [Zjoi2013]K大数查询(树套树)
- HDU 5981 2016ICPC大连 K: Guess the number(推理)
- bzoj 2281: [Sdoi2011]黑白棋 bzoj 4550: 小奇的博弈(Nimk博弈+DP)
- linux系统下如何设置和修改文件和文件夹的读、写、执行权限
- [paper reading] GoogLeNet