题目链接:hdu 5380 Travel with candy

保持油箱一直处于满的状态,维护一个队列,记录当前C的油量中分别能够以多少价格退货,以及能够推货的量。每到一个位置,能够该商店的sell值更新队列中全部价格小于sell的(还没有卖)。

用buy值更新队列中大于buy(卖掉了)。移动所消耗的油从价格最低的開始。

#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;
typedef long long ll;
const int maxn = 2 * 1e5 + 5;ll ans;
int N, C, L, R, D[maxn], S[maxn], B[maxn], W[maxn * 2], V[maxn * 2];void init () {scanf("%d%d", &N, &C);for (int i = 1; i <= N; i++)scanf("%d", &D[i]);for (int i = 0; i <= N; i++)scanf("%d%d", &B[i], &S[i]);
}void merge(int s) {int v = 0;while (L <= R && W[L] <= s)v += V[L++];if (v) {W[--L] = s;V[L] = v;}
}int sell (int s) {int ret = 0;while (L <= R && W[R] >= s) {ans -= 1LL * V[R] * W[R];ret += V[R--];}return ret;
}void consume(int v) {while (v) {int k = min(V[L], v);v -= k;V[L] -= k;if (V[L] == 0)L++;}
}void solve () {ans = 0;L = N, R = N - 1;;for (int i = 0; i < N; i++) {merge(S[i]);int add = (i == 0 ? C : D[i] - D[i-1]);add += sell(B[i]);W[++R] = B[i];V[R] = add;ans += 1LL * B[i] * add;consume(D[i+1] - D[i]);}merge(S[N]);while (L <= R) {ans -= 1LL * W[L] * V[L];L++;}
}int main () {int cas;scanf("%d", &cas);while (cas--) {init ();solve ();printf("%lld\n", ans);}return 0;
}

hdu 5380 Travel with candy(双端队列)相关推荐

  1. HDU 4286 Data Handler [栈,双端队列]

    这题比较容易想到的做法是splay,但是splay写起来比较麻烦而且每次操作都有LogN的复杂度,双向链表也是可以实现的,但实践起来比较麻烦,尤其是翻转操作... 可以发现每次L或者R都是移动一位的, ...

  2. HDU - 7072 Boring data structure problem 双端队列 + 思维

    传送门 文章目录 题意: 思路: 题意: 你需要实现如下四个操作 q≤1e7q\le1e7q≤1e7 思路: 做的时候想了个链表的思路让队友写了,懒. 看了题解感觉题解还是很妙的. 你需要快速插入一个 ...

  3. C++ 双端队列(deque)的使用

    双端队列(deque)是什么 双端队列(deque)是一种随机访问的数据类型,提供了在序列两端快速插入和删除的功能,deque类似于vector, 双端队列(deque)属于STL(Standard ...

  4. python deque双端队列的神奇用法

    python中的deque双端队列,类似list的任意一端都可实现较快的add和pop操作 from collections import dequed=deque(maxlen=20) for i ...

  5. python数据结构与算法:队列与双端队列

    双端队列: #################队列#################### #coding:utf-8 """ Deque() 创建一个空的双端队列 ad ...

  6. LeetCode实战:设计循环双端队列

    题目英文 Design your implementation of the circular double-ended queue (deque). Your implementation shou ...

  7. 数据结构之队列、双端队列

    数据结构之队列.双端队列 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 队列是一种先进先出的(First in First Out)的线性表,简称FIFO.允许插入的 ...

  8. 关于学习Python的一点学习总结(54->集合->堆->双端队列)

    集合,堆,双端队列 再谈集合set:集合是由内置类set实现的 >>> set(range(10)){0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 可使用序列(或其他可 ...

  9. java lifo 队列_1.8 Java 队列 Queue、双端队列 Deque - Java 知识总结与学习

    queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口.除了基本的 Collection 操作外,队列还 ...

最新文章

  1. 数据中心网络架构 — 传统数据中心网络 — 传统树型三层网络架构
  2. [转载]关于request和session详解
  3. 【自动驾驶】17. pitch yaw roll是什么
  4. ACM入门之【前缀和】
  5. formal method
  6. 优达学城数据分析师纳米学位——P5项目知识点整理贝叶斯规则
  7. (笔记)java环境变量设置
  8. 智能实验室-CHM浏览器(CHM Explorer) 2.0.0.200
  9. 打开文件管理器_会声会影影片配置文件管理器
  10. android studio:aar文件出现问号,导入不生效解决
  11. Java反射机制的缺点
  12. vmware centos6.4挂载ntfs移动硬盘
  13. ROM.RAM,FLASH,PROM,EPROM,EEPROM的区别
  14. ubuntu正确安装显卡驱动的姿势
  15. Mac 在 Appstore 下载 hight Sierra 10.13
  16. 百度快速排名软件到底是如何实现的?
  17. java end_Fabric学习笔记(七) - fabric-sdk-java End2endIT运行
  18. 像电影里的黑客高手一样敲代码攻击入侵网站!装逼神器 !
  19. 笔记本电脑数字键盘打不出数字的解决方案
  20. l完整的计算机系统,一个完整的计算机系统包括

热门文章

  1. Java版二叉树遍历,查找,顺序化存储代码实现
  2. Java数字匹配的kmp算法
  3. http响应头中X-Frame-Options的作用及危害
  4. Python 进程锁使用
  5. 安全开发流程(SDL、微软)
  6. ElasticSearch 未授权访问记录(端口:9200)
  7. Latex可能遇到的一些问题
  8. EOSIO:EOSIO最新版1.4.0创建测试账户
  9. PHP初入--表单元素
  10. 战术网络安全检查表 | Symantec Connect