二分第x次砍的位置,然后用线段树查询小于这个位置的数的个数和值的和。然后判断即可

注意!!!主席树是通过动态开点实现的,本身已经不用再从1开始了,而本题开的范围也应该是0,100000 而不是1,100000(害得我找了很久的错误)

#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<math.h>
#define LL long long
using namespace std;
const int maxx = ;
const double eps = 1e-;
struct node{
LL l,r,cnt;
LL w;
}tree[maxx<<];
LL root[maxx];
LL a[maxx];
LL pre[maxx];
LL cnt;
LL num;
LL sumlength;
void inserts(LL l,LL r,LL pre,LL &now,LL pos){
now=++cnt;
tree[now]=tree[pre];
tree[now].cnt++;
tree[now].w=tree[now].w+pos;
if (l==r){
return;
}
LL mid=(l+r)>>;
if (pos<=mid){
inserts(l,mid,tree[pre].l,tree[now].l,pos);
}else {
inserts(mid+,r,tree[pre].r,tree[now].r,pos);
}
}
void query(LL L,LL R,LL l,LL r,LL pos){
// if (l>pos)return;
if (l==r){
num+=(tree[R].cnt-tree[L].cnt);
sumlength+=(tree[R].w-tree[L].w);
return ;
}
LL mid=(l+r)>>;
if (pos<=mid){
query(tree[L].l,tree[R].l,l,mid,pos);
}else{
num+=(tree[tree[R].l].cnt-tree[tree[L].l].cnt);
sumlength+=(tree[tree[R].l].w-tree[tree[L].l].w);
query(tree[L].r,tree[R].r,mid+,r,pos);
}
}
int main(){
LL n,q;
while(~scanf("%lld%lld",&n,&q)){
pre[]=;
cnt=;
for (int i=;i<=n;i++){
scanf("%lld",&a[i]);
pre[i]=pre[i-]+a[i];
inserts(,,root[i-],root[i],a[i]);
}
LL ll,rr;
LL x,y;
while(q--){
scanf("%lld%lld%lld%lld",&ll,&rr,&x,&y);
double l=,r=;
double ans=;
while(fabs(r-l)>eps){
double mid=(l+r)/;
num=;
sumlength=;
LL ss=floor(mid);
query(root[ll-],root[rr],,,ss);
num=(rr-ll+)-num;
double s=num*mid+sumlength;
double step=1.0*(pre[rr]-pre[ll-])/y;
if (s-step*(y-x)>eps){
r=mid;
}else{
l=mid;
}
}
printf("%.10f\n",l);
}
}
return ;
}

最新文章

  1. 关于多字节、宽字节、WideCharToMultiByte和MultiByteToWideChar函数的详解
  2. Java算法-hash算法
  3. C++运算符重载的规则
  4. msvc2010生成的指令序列有问题,可能跟pgo有关
  5. [io PWA] Great libraries and tools for great Progressive Web Apps
  6. Web Service属性介绍
  7. iOS coreData
  8. JSP入门 Filter
  9. mybatis mysql 批量插入
  10. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(七)
  11. newSoft
  12. 网防G01管理检测系统Linux版安装
  13. RPM包制作过程(一)
  14. 【python小练】0010
  15. Git环境配置
  16. 恭喜&quot;微微软&quot;喜当爹,Github嫁入豪门。
  17. Windows 窗体设计器生成的代码
  18. python实现atm机基本操作及购物车
  19. 破解无线网络密码-BT3如何使用1
  20. MSDN中回调函数的讲解及其C#例子:用委托实现回调函数

热门文章

  1. Comparator进行List集合排序
  2. GitHub - firebase/php-jwt: PEAR package for JWT
  3. golang之select
  4. Calendar to julian date format
  5. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU外设那些事(2)- 善变的FlexRAM
  6. 从0开始学习 GitHub 系列之「01.初识 GitHub
  7. Python 五个知识点搞定作用域
  8. Spring Boot → 08:嵌入式Servlet容器自定义
  9. POJ3697
  10. 转载 初探Promise