看到题解说二分 心里也有数了。。。。。

H Cutting Bamboos

给了一些高度得柱子 每区间你可以坎y次 y次之后 必须砍没有了
没有砍 总长度得一样 问第x次砍得高度在哪里
因为砍得次数 和 每次砍得总长度是一定得 我们二分高度
这样 剩下得总长度 就可以用来做二分 得判断了
小于高度得总距离 和高于 高度得数量 * mid 就是我们剩下得距离

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
const double dmax = 1e9 + 1;
const double eps = 1e-8;int n, m;
int a[maxn], b[maxn], cnt;
long long sum[maxn];
struct node {int lc, rc;long long sum;int cnt;
} tree[maxn * 20];
int tot, root[maxn];int build(int l, int r) {int p = ++ tot;if(l == r) return p;int mid = l + r >> 1;tree[p].lc = build(l, mid);tree[p].rc = build(mid + 1, r);return p;
}int ins(int now, int l, int r, int x, long long val) {int p = ++ tot;tree[p] = tree[now];if(l == r) {tree[p].sum += val;tree[p].cnt += 1;return p;}int mid = l + r >> 1;if(x <= mid) tree[p].lc = ins(tree[now].lc, l, mid, x, val);else tree[p].rc = ins(tree[now].rc, mid + 1, r, x, val);tree[p].sum = tree[tree[p].lc].sum + tree[tree[p].rc].sum;tree[p].cnt = tree[tree[p].lc].cnt + tree[tree[p].rc].cnt;return p;
}long long ask_sum(int p, int q, int l, int r, int L, int R) {if(R < L) return 0;if(L <= l && r <= R) return tree[p].sum - tree[q].sum;int mid = l + r >> 1;long long res = 0;if(L <= mid) res += ask_sum(tree[p].lc, tree[q].lc, l, mid, L, R);if(R > mid) res += ask_sum(tree[p].rc, tree[q].rc, mid + 1, r, L, R);return res;
}int ask_cnt(int p, int q, int l, int r, int L, int R) {if(R < L) return 0;if(L <= l && r <= R) return tree[p].cnt - tree[q].cnt;int mid = l + r >> 1;int res = 0;if(L <= mid) res += ask_cnt(tree[p].lc, tree[q].lc, l, mid, L, R);if(R > mid) res += ask_cnt(tree[p].rc, tree[q].rc, mid + 1, r, L, R);return res;
}bool chk(int l, int r, double mid, double tall) {int pos = lower_bound(b + 1, b + 1 + cnt, ceil(mid)) - b;int k = ask_cnt(root[r], root[l - 1], 1, cnt, pos, cnt);long long presum = ask_sum(root[r], root[l - 1], 1, cnt, 1, pos - 1);if(1.0 * presum + k * mid > tall) return 0;else return 1;
}signed main() {cin >> n >> m;for(int i = 1; i <= n; i ++)cin >> a[i], sum[i] = sum[i - 1] + a[i], b[i] = a[i];sort(b + 1, b + 1 + n);cnt = unique(b + 1, b + 1 + n) - b - 1;root[0] = build(1, cnt);for(int i = 1; i <= n; i ++) {int pos = lower_bound(b + 1, b + 1 + cnt, a[i]) - b;root[i] = ins(root[i - 1], 1, cnt, pos, 1ll * a[i]);}while(m --) {int L, R, X, Y;cin >> L >> R >> X >> Y;double l = 0, r = dmax;double tall = 1.0 * (1.0 * sum[R] - sum[L - 1]) / Y * (Y - X);while(r - l > eps) {double mid = (l + r) / 2;if( chk(L, R, mid, tall) ) l = mid;else r = mid;}printf("%.12lf\n", l);}return 0;
}

2019牛客多校第九场 H Cutting Bamboos (二分主席树)相关推荐

  1. 牛客多校第九场 H Cutting Bamboos —— 主席树

    题目链接:点我啊╭(╯^╰)╮ 题目大意: 给你一片竹林,编号 1 1 1 到 n n n ,给定初始高度     每次查询区间,问一共砍 y y y 刀的时候,第 x x x 刀的高度     要求 ...

  2. 2019暑假牛客多校赛第九场H.Cutting Bamboos (主席树+二分)

    题意: 有n条柱子,高度为aia_iai​ ,我们有qqq次操作.在l到r的范围内砍yyy次,将所有的树高都砍为0,但是保证每一刀砍出来的长度(砍除树高于该高度的和)都是相同的.问你第xxx次砍的时候 ...

  3. 2019牛客多校第九场AThe power of Fibonacci(广义BM)

    2019牛客多校第九场AThe power of Fibonacci(广义BM) 题目大意 求斐波那契数列m次方的前n项和 解题思路 显然,斐波那契的m次方前缀和依然是线性递推,因此考虑用exBM求解 ...

  4. Cutting Bamboos(牛客多校第九场H主席树+二分+思维)

    链接:https://ac.nowcoder.com/acm/contest/889/H 来源:牛客网 There are n bamboos arranged in a line. The i-th ...

  5. Quadratic equation(二次剩余)2019牛客多校第九场

    链接:https://ac.nowcoder.com/acm/contest/889/B 来源:牛客网 题目描述 Amy asks Mr. B problem B. Please help Mr. B ...

  6. 2019牛客多校第九场AThe power of Fibonacci——扩展BM

    题意 求斐波那契数列m次方的前n项和,模数为 $1e9$. 分析 线性递推乘线性递推仍是线性递推,所以上BM. 由于模数非质数,上扩展版的BM. 递推多少项呢?本地输入发现最大为与前57项有关(而且好 ...

  7. 2019牛客多校第一场

    2019牛客多校第一场 题号 题目 知识点 A Monotonic Matrix B Symmetric Matrix C Fluorescent 2 D Two Graphs E Removal F ...

  8. 2019牛客暑期多校训练营(第九场)H Cutting Bamboos(主席树+二分)

    链接:https://ac.nowcoder.com/acm/contest/889/H 来源:牛客网 题目描述 There are n bamboos arranged in a line. The ...

  9. 2019牛客暑期多校训练营(第九场)H-Cutting Bamboos(主席树)

    题意:n个竹子,有高度,q次询问,询问之间是独立的,每次查询输入l,r,x,yl,r,x,yl,r,x,y代表砍区间[l,r][l,r][l,r]内的竹子砍y次,最后一次要砍成0,每次砍掉的总长度相同 ...

最新文章

  1. 平台游戏中走与跳的实现
  2. python学习之--习题集
  3. WCF basicHttpBinding之Message Security Mode
  4. 带刺的下沉市场:小镇青年要的不止是9块9包邮
  5. 【IDEA】Error:java: Compilation failed: internal java compiler error
  6. cstring越界_CString 内核
  7. servlet request返回上下文路径的方法
  8. 微信dat文件用什么软件打开方式_dat文件怎么打开微信dat文件用什么软件打开
  9. RestClient
  10. 第二章 基于QT和DCMTK的Dicom 图像浏览器---界面设计
  11. 校园网IPv6免流量上网
  12. html的网页制作需要哪些知识,网页制作之HTML基础知识
  13. 炉石传说 爬取全部卡牌
  14. Oracle导入dmp文件(cmd方式)
  15. CNCC 2018 今日开幕,五场特邀报告引爆「大数据推动数字经济」| CNCC 2018
  16. 用Lua语言编写Wireshark dissector插件
  17. 外贸B2B网站如何做Google SEO获取流量?
  18. 手机应用推广必备发布渠道【安卓渠道汇】
  19. 2022.09 青少年Python等级考试(六级) 选择题部分
  20. 三、使用Teigha.net打开CAD(.dwg/.dxf)文件,并显示到panel界面绑定事件

热门文章

  1. 读史鉴今:女人的12种结局
  2. 《PyQT5软件开发 - 控件篇》第3章 单行文本框QLineEdit
  3. 绝对高效实现! 给你一个包含n个整数的数组nums,判断nums是否存在三个元素a,b,c使得a+b+c =0...
  4. android 画布心形,用CANVAS实现的心形动画效果
  5. 专利撰写教程网站合集
  6. python建筑案例_有哪些关于 Python 在建筑中的应用和教程?
  7. Unable to register Log4j shutdown hook because JVM is shutting down. Using SimpleLogger 问题分析
  8. Flash在线文档阅读器::pdf、doc、docx、xls、xlsx、ppt、pptx、htm、txt、rtf、epub、csv、xdoc等
  9. 前端单元测试到底要怎么写?看这一篇就够了
  10. 计算机网络序号是什么,Excel序号是什么 Excel序号详细介绍