链接

题意:

有n种茶,n个人,第i种茶有 a[i]的量,第i个人一次能喝 b[i], 第i个人从第i种茶开始往前喝,求每个人能喝多少

分析

对于第 i 杯茶,其只会被 i,i+1,i+2,⋯,n 这些人品尝. 可以发现一定是第 i ∼ j个人可以品尝到 b_i∼b_j单位的茶,然后第 j+1个人可以品尝到第 i 杯茶剩下的所有部分,然后再后面的人就没有茶可以品尝了.

对于所有的茶  i ,我们容易通过二分找到 j 的位置,我们可以统计对于每个人k,其品尝到 /b_k 毫升茶多少次,我们发现每次我们都是做一个静态的区间加,可以用差分解决.而对于品尝到所有剩下的茶的情况可以直接暴力加到答案上.总复杂度为O(nlog⁡n).

参考代码:

#include <bits/stdc++.h>using ll = long long;
const int maxn = 2e5 + 5;
int a[maxn], b[maxn];
ll s[maxn];
ll d[maxn], ans[maxn];int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int T;std::cin >> T;while (T--) {int n;std::cin >> n;for (int i = 1; i <= n; i++) {d[i] = ans[i] = 0;}for (int i = 1; i <= n; i++) {std::cin >> a[i];}for (int i = 1; i <= n; i++) {std::cin >> b[i], s[i] = s[i - 1] + b[i];// 求一下 b 数组的前缀和}for (int i = 1; i <= n; i++) {int r = std::upper_bound(s + 1, s + 1 + n, a[i] + s[i - 1]) - (s + 1);d[i]++, d[r + 1]--;if (r < n) {ans[r + 1] += a[i] - (s[r] - s[i - 1]);}}for (int i = 1; i <= n; i++) {d[i] += d[i - 1];ans[i] += d[i] * b[i];}for (int i = 1; i <= n; i++) {std::cout << ans[i] << " \n"[i == n];}}return 0;
}

方法二:

我们使用小根堆存储剩余的茶

假设当前剩余的情况是这样的 :

参考代码:

#include <bits/stdc++.h>using ll = long long;const int N = 1e6 + 10;int n;
ll a[N], b[N], ans[N];void solve() {std::cin >> n;for (int i = 1; i <= n; i++) {std::cin >> a[i];}for (int i = 1; i <= n; i++) {std::cin >> b[i], ans[i] = 0;}ll now = 0;std::priority_queue<ll, std::vector<ll>, std::greater<ll>> q;for (int i = 1; i <= n; i++) {q.push(a[i] + now);while (q.size()) {ll t = q.top();if (t - now > b[i]) {ans[i] += q.size() * b[i];break;} else {ans[i] += t - now, q.pop();}}now += b[i];}for (int i = 1; i <= n; i++) {std::cout << ans[i] << " \n"[i == n];}
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int t;std::cin >> t;while (t--) {solve();}return 0;
}

CF1795C Tea Tasting (前缀和,差分,二分)相关推荐

  1. 基础算法__习题——排序、二分、前缀与差分

    前言 重学算法第1天,希望能坚持打卡不间断. 直到学完提高课.(暂定) 预计时长三个月内,明天再来!肝就完了 2月13日,day01 打卡 学完y总的算法基础课1.3-Week1 习题课 共7题,知识 ...

  2. 1795C Tea Tasting

    1795C Tea Tasting 从 aia_iai​ 入手,找到 iii 号茶能支撑到哪一个人喝,然后将 iii 号茶所能供应的人通过差分进行修改 表示这个人能喝多少次 bib_ibi​ , 对于 ...

  3. 北京区域赛I题,Uva7676,A Boring Problem,前缀和差分

    A Boring Problem 题解 其实这题不难,只要想到了前缀和差分就基本OK了. 我们要求的是第iii项的式子: F(i)=(a1+a2+...+ai)k+(a2+...+ai)k+...+( ...

  4. 前缀和+差分+ 树状数组

    前缀和+差分的理论知识 前缀和相关题: 「USACO16JAN」子共七 Subsequences Summing to Sevens 定理:若两个数相减 mod k == 0,那么这两个数mod k ...

  5. [多项式前缀和差分]智乃酱的静态数组维护问题多项式

    [多项式前缀和差分]智乃酱的静态数组维护问题多项式 题目 思路 参考资料 基本定理是:最高次为n次的多项式最多做n+1阶差分 最板的题目是,区间加一个常数,我们一般对a数组做一次差分然后在a[l]和a ...

  6. 洛谷P2463 [SDOI2008]Sandy的卡片(后缀数组SA + 差分 + 二分答案)

    题目链接:https://www.luogu.org/problem/P2463 [题意] 求出N个串中都出现的相同子串的最长长度,相同子串的定义如题:所有元素加上一个数变成另一个,则这两个串相同,可 ...

  7. AtCoder Beginner Contest 205D题Kth Excluded(差分+二分)

    题目链接 给出N个数和Q组询问,每次询问输出第K小的数,并且该数不能是N个数中的 考虑先做差分 pre[i] 表示每个数之间可以插入多少个数 然后将差分做个前缀和,sum[i]=k 表示前i个数可以放 ...

  8. C. Tea Tasting

    传送门 题意: 有n种茶,n个人,第i种茶有 a[i]的量,第i个人一次能喝 b[i], 第i个人从第i种茶开始往前喝,求每个人最多能喝多少茶. 思路:  可以从后面往前面挪,用二分去寻找当前茶能有多 ...

  9. C. Tea Tasting codeforces 1795C

    Problem - C - Codeforces 题目大意:有两个长度为n的数组a,b,每一轮操作,ai减去对应位置上的bi,最小减为0,然后删除b1,b数组所有元素都向左移,直到b数组中所有数都被删 ...

最新文章

  1. IIRF重写在asp.net4.0+IIS6中部分失败的解决方案
  2. 【学时总结模板时间】◆学时·10 模板·3◆ AC自动机
  3. 踩坑 - click事件与blur事件冲突问题 input文件上传同名文件问题
  4. python基础版课件_python基础课件精编版.ppt
  5. c#如何实现excel导入到sqlserver,如何实现从sqlserver导出到excel中(详细)
  6. java为什么要分为service层,dao层,controller层
  7. ListView setOnItemClickListener无法响应点击事件解决
  8. Axure使用教程(一)、下载和基本使用
  9. Django搭建个人博客之制作app并配置相关环境
  10. 读取TXT文档数据生成词云图
  11. DEL: 华为无线modem变无线路由器
  12. MBA提前面试:商学院看重软实力
  13. 【工具神器】PO VO DTO 转换神器
  14. 面向汽车企业的PLM知识管理
  15. MySQL错误:Can't create table‘..’ (errno:150)解决方案
  16. stm32F407 连接 对射式红外对管 样例
  17. 没有网能使用mysql吗_就用本地数据库;即使在没有联网的电脑上也可以放心使用...
  18. ASEMI整流模块MDA110-16参数,MDA110-16规格
  19. ajax请求type种类,ajax配置项中的type与method
  20. 将XDOC引擎加入你的J2EE应用中

热门文章

  1. 计算机考研难度特别大吗,计算机考研难度大吗?学姐为你深度剖析
  2. Python超市管理系统 毕业设计-附源码111042
  3. 知识付费项目备受质疑究竟是什么原因?“贩卖焦虑““割韭菜”?通通不是!
  4. Android RecyclerView不显示
  5. 数据单位---bit 与 byte
  6. HDU 4986/BC 7B Little Pony and Alohomora Part I
  7. Linux添加 PYTHONPATH 环境变量的3种方法
  8. OpenCV学习代码记录——轮廓(contour)检测
  9. ExtJs 树的右击菜
  10. 氮化物 ITO-Ag复合薄膜/Si—P(111)和Si—P(100)两种不同Si片做基底制备TiNx薄膜/立方氮化硼聚晶(PcBN)复合物