51Nod-1711平均数(二分+树状数组|线段树)
来源:互联网 发布:ubuntu 安装lnmp 编辑:程序博客网 时间:2024/05/29 12:22
1711 平均数
基准时间限制:4 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
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
alpq654321 (题目提供者)
题意:
先把k开成longlong。。。算了一下m的数量级是1e9开了intWA了无数次。。。
很容易看出来是二分答案,那么对于每一个答案,有多少个区间满足怎么处理?
形式完全一样,那么以sum[X]-ans*X扔到树状数组,求有多少个数小于等于他就可以了
需要注意的是要把0也要扔进去即sum[0]-ans*0,不然区间统计会错误
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<cmath>using namespace std;typedef long long LL;const int maxn=1e5+10;const double eps=1e-6;int T[maxn];int kase,n,a[maxn];LL m,c[maxn];double b[maxn],h[maxn];inline LL get(int x){ LL res=0; for(;x;x-=x&-x)res+=T[x]; return res;}inline void add(int x,int val){ for(;x<=n+1;x+=x&-x)T[x]+=val;}inline LL check(double res){ memset(T,0,sizeof(T)); for(int i=0;i<=n;++i)b[i]=h[i]=c[i]-i*res; sort(h,h+n+1); int d=unique(h,h+n+1)-h; LL cnt=0; for(int i=0;i<=n;++i) { int x=lower_bound(h,h+d,b[i])-h+1; cnt+=get(x); add(x,1); } return cnt;}inline double find(LL k){ double L=1,R=100000; while(R-L>=eps) { double mid=(L+R)/2.0; if(check(mid)<k)R=mid; else L=mid; } return (L+R)/2.0;}int main(){ while(~scanf("%d%lld",&n,&m)) { c[0]=0; for(int i=1;i<=n;++i) { scanf("%d",a+i); c[i]=c[i-1]+(double)a[i]; } double ans=find(m); printf("%.3f\n",ans); } return 0;}
阅读全文
0 0
- 51Nod-1711平均数(二分+树状数组|线段树)
- 51nod 1711 平均数(二分 树状数组)
- 51nod 平均数(二分+离散+树状数组)
- [树状数组]51 Nod 1711——平均数
- 51NOD 1210 矩阵查询 【线段树/树状数组】
- 51Nod 1672 扫描线 + 线段树/树状数组
- 51NOD 1711平均数
- 51nod 1711 平均数
- 【51nod 1711】平均数
- 51nod-1711 平均数
- 51Nod-1711-平均数
- 51nod 1711 平均数
- 【二分+正序对】51Nod 1711 平均数
- hdu5338 贪心+线段树+二分+树状数组
- 线段树+树状数组+二分+划分树+主席树+hdu4417
- hdu4417(树状数组)(线段树)(划分树+二分)
- hdoj 1166 敌兵布阵 【线段树&&二分树】【树状数组】
- poj 2182 线段树水 或者树状数组+二分
- 最大流DFS(EK)算法模板
- 数据结构上机实验之二分查找之平衡二叉树
- 优先队列
- Pandas知识点(五)
- linux安装jdk以及eclipse,安装Anaconda与pyChram
- 51Nod-1711平均数(二分+树状数组|线段树)
- 算法竞赛入门——6174问题
- [NOIP2016]魔法阵 T4
- mysql 添加中文数据出现乱码的解决方法
- mysql(四/2)表的操作
- 【Python2.7 gevent 库安装步骤】
- _variant_t 数据类型介绍
- oracle 表空间满了排查和解决(ORA-1653: unable to extend table test by 128 in tab)
- 创作了一幅春天的画作