Solved:3

Rank:181

H Cutting Bamboos

这个东西好像叫整体二分

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 5; int n, m, cnt, len;
int a[MAXN];
int b[MAXN];
int t[MAXN];
int num[MAXN << 5];
int ls[MAXN << 5];
int rs[MAXN << 5];
double sum[MAXN << 5]; int build(int l, int r) {
int rt = ++cnt;
sum[0] = 0, num[0] = 0;
int mid = l + r >> 1;
if(l < r) {
ls[rt] = build(l, mid);
rs[rt] = build(mid + 1, r);
}
return rt;
} int add(int o, int l, int r, int k, int v) {
int rt = ++cnt;
ls[rt] = ls[o]; rs[rt] = rs[o]; sum[rt] = sum[o] + 1.0 * v; num[rt] = num[o] + 1; int mid = l + r >> 1;
if(l < r)
if(k <= mid) ls[rt] = add(ls[o], l, mid, k, v);
else rs[rt] = add(rs[o], mid + 1, r, k, v);
return rt;
} double query(int ql, int qr, int l, int r, double k, int tot) {
if(l == r) return k / (1.0 * (num[qr] - num[ql] + tot)); int mid = l + r >> 1;
double lsum = sum[ls[qr]] - sum[ls[ql]];
double rsum = 1.0 * mid * (num[rs[qr]] - num[rs[ql]] + tot);
if(lsum + rsum > k) return query(ls[ql], ls[qr], l, mid, k, tot + num[rs[qr]] - num[rs[ql]]);
else return query(rs[ql], rs[qr], mid + 1, r, k - lsum, tot);
} int main() {
cnt = 0;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++) scanf("%d", &a[i]), b[i] = a[i];
sort(b + 1, b + 1 + n);
len = unique(b + 1, b + 1 + n) - b - 1; t[0] = build(0, 100000);
for(int i = 1; i <= n; i++) t[i] = add(t[i - 1], 0, 100000, a[i], a[i]); while(m--) {
int l, r, x, y;
scanf("%d%d%d%d", &l, &r, &x, &y);
double tmp = 1.0 * (sum[t[r]] - sum[t[l - 1]]) / (1.0 * y);
printf("%.8lf\n", query(t[l - 1], t[r], 0, 100000, tmp * (y - x), 0));
}
return 0;
}

Cutting Bamboos

最新文章

  1. COGS 2533. [HZOI 2016]小鱼之美
  2. (转)nodejs中npm常用命令
  3. ToolTipController 事件触发显示时 避免闪烁的处理方法
  4. 《理解 ES6》阅读整理:函数(Functions)(四)Arrow Functions
  5. jQuery form插件的使用--ajaxForm()和ajaxSubmit()的可选参数项对象
  6. PDF.NET+EasyUI实现只更新修改的字段
  7. 怎样制作PHP验证码?
  8. Unity四种路径总结
  9. Missing Number, First Missing Positive
  10. Asp.net web api 知多少
  11. 自学java难吗?一个JAVA学习者应该具备的素质
  12. WPF:完美自定义MeaagseBox 2.0
  13. python之文件读写和异常处理
  14. American Football Vocabulary!
  15. python之路----进程三
  16. jsp jsp运行原理
  17. SYS远程连接出错ORA-01031:Insufficient privileges
  18. SpringBoot中使用LoadTimeWeaving技术实现AOP功能
  19. django from组件 实现增加 删除 编辑(推荐用法)
  20. 六:ZooKeeper的java客户端api的使用

热门文章

  1. 上班从换一张桌面壁纸开始——开源小工具Bing每日壁纸
  2. tomcat版本号修改已dwr配置错误安全漏洞整改
  3. ssh信任 sftp用法 scp用法【转】
  4. 安装SVN和汉化包及基本使用
  5. C++中的extern“C”
  6. show slave status常用参数备忘
  7. .NET 云原生架构师训练营(模块二 基础巩固 Scrum 团队)--学习笔记
  8. 构造无字母数字Webshell
  9. 深入研究.NET 5的开放式遥测
  10. 24V降压5V芯片,5A,4.5V-30V输入,同步降压调节器