pid=5380">链接

题解链接:http://www.cygmasot.com/index.php/2015/08/16/hdu_5380

题意:

n C

一条数轴上有n+1个加油站,起点在0,终点在n。车的油箱容量为C

以下n个数字表示每一个加油站距离起点的距离。

以下n+1行表示每一个加油站买进和卖出一单位油的价格。油能够买也能够卖。

问开到终点的最小花费。

思路:

把油箱保持装满。然后维护一个价格单调递增的队列。

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <vector>
#include <string>
#include <time.h>
#include <math.h>
#include <iomanip>
#include <queue>
#include <stack>
#include <set>
#include <map>
const int inf = 1e9;
const double eps = 1e-8;
const double pi = acos(-1.0);
template <class T>
inline bool rd(T &ret) {
char c; int sgn;
if (c = getchar(), c == EOF) return 0;
while (c != '-' && (c<'0' || c>'9')) c = getchar();
sgn = (c == '-') ? -1 : 1;
ret = (c == '-') ? 0 : (c - '0');
while (c = getchar(), c >= '0'&&c <= '9') ret = ret * 10 + (c - '0');
ret *= sgn;
return 1;
}
template <class T>
inline void pt(T x) {
if (x < 0) { putchar('-'); x = -x; }
if (x > 9) pt(x / 10);
putchar(x % 10 + '0');
}
using namespace std;
const int N = 2e5 + 10;
typedef long long ll;
typedef pair<int, int> pii;
ll n, c;
ll in[N], out[N], dis[N];
ll work() {
ll ans = c*in[0];
deque<ll> In, o;
In.push_back(in[0]); o.push_back(c);
for (int i = 1; i <= n; i++)
{
ll tmp = dis[i];
while (tmp) {
ll LEF = o.front();
ll mi = min(tmp, LEF);
LEF -= mi;
tmp -= mi;
o.pop_front();
if(LEF)
o.push_front(LEF);
else
In.pop_front();
}
ll tot = dis[i]; tmp = 0;
while (!In.empty()) {
if (In.front() <= out[i])
{
tmp += o.front();
ans -= out[i]*o.front();
o.pop_front();
In.pop_front();
}
else break;
}
if (tmp) {
ans += out[i] * tmp;
o.push_front(tmp);
In.push_front(out[i]);
}
while (!In.empty()) {
if (In.back() >= in[i])
{
tot += o.back();
ans -= In.back()*o.back();
o.pop_back();
In.pop_back();
}
else break;
}
o.push_back(tot);
In.push_back(in[i]);
ans += in[i] * tot;
}
while (!In.empty()) {
ans -= o.front() * In.front();
In.pop_front(); o.pop_front();
}
return ans;
}
int main() {
int T; rd(T);
while (T--) {
rd(n); rd(c);
for (int i = 1; i <= n; i++)rd(dis[i]);
for (int i = n; i > 1; i--)dis[i] -= dis[i - 1];
for (int i = 0; i <= n; i++)rd(in[i]), rd(out[i]);
pt(work()); puts("");
}
return 0;
}
/*
1
3 9
2 4 6
8 2
4 3
6 3
9 6 1
4 9
4 9 12 18
5 1
7 6
3 2
4 2
8 6 1
4 5
2 4 8 10
2 1
2 1
9 3
9 8
7 2 1
9 4
2 4 5 7 8 9 11 14 15
9 8
10 5
8 2
4 3
2 1
7 3
9 6
10 8
5 3
8 5 */

Travel with candy

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)

Total Submission(s): 104    Accepted Submission(s): 46

Problem Description
There are n+1 cities on a line. They are labeled from city 0 to city n. Mph has to start his travel from city 0, passing city 1,2,3...n-1 in order and finally arrive city n. The distance between city i and city 0 is ai.
Mph loves candies and when he travels one unit of distance, he should eat one unit of candy. Luckily, there are candy shops in the city and there are infinite candies in these shops. The price of buying and selling candies in city i is buyi and selli per
unit respectively. Mph can carry at most C unit of candies.

Now, Mph want you to calculate the minimum cost in his travel plan.
 
Input
There are multiple test cases.

The first line has a number T, representing the number of test cases.

For each test :

The first line contains two numbers N and C (N≤2×105,C≤106)

The second line contains N numbers a1,a2,...,an.
It is guaranteed that ai>ai−1 for
each 1<i<=N .

Next N+1 line
: the i-th line contains two numbers buyi−1 and selli−1 respectively.
(selli−1≤buyi−1≤106)



The sum of N in
each test is less than 3×105.
 
Output
Each test case outputs a single number representing your answer.(Note: the answer can be a negative number)
 
Sample Input
1
4 9
6 7 13 18
10 7
8 4
3 2
5 4
5 4
 
Sample Output
105
 
Author
SXYZ
 
Source
 

HDU 5380 Travel with candy 单调队列的更多相关文章

  1. hdu 5380 Travel with candy(双端队列)

    pid=5380">题目链接:hdu 5380 Travel with candy 保持油箱一直处于满的状态,维护一个队列,记录当前C的油量中分别能够以多少价格退货,以及能够推货的量. ...

  2. HDU 5380 Travel with candy (贪心,单调队列)

    题意: 有n+1个城市按顺序分布在同一直线上,现在需从0号城市按顺序走到n号城市(保证可达),从0号城市到i号城市需要消耗ai个糖果,每个城市都可以通过买/卖糖果来赚取更多的钱,价格分别是buyi和s ...

  3. hdu 5945 Fxx and game(单调队列优化DP)

    题目链接:hdu 5945 Fxx and game 题意: 让你从x走到1的位置,问你最小的步数,给你两种走的方式,1.如果k整除x,那么你可以从x走一步到k.2.你可以从x走到j,j+t<= ...

  4. hdu 3410 Passing the Message(单调队列)

    题目链接:hdu 3410 Passing the Message 题意: 说那么多,其实就是对于每个a[i],让你找他的从左边(右边)开始找a[j]<a[i]并且a[j]=max(a[j])( ...

  5. HDU 2490 Parade(DPの单调队列)(2008 Asia Regional Beijing)

    Description Panagola, The Lord of city F likes to parade very much. He always inspects his city in h ...

  6. hdu 6319 逆序建单调队列

    题目传送门//res tp hdu 维护递增单调队列 根据数据范围推测应为O(n)的. 我们需要维护一个区间的信息,区间内信息是"有序"的,同时需要在O(1)的时间进行相邻区间的信 ...

  7. HDU - 5289 Assignment (RMQ+二分)(单调队列)

    题目链接: Assignment  题意: 给出一个数列,问其中存在多少连续子序列,使得子序列的最大值-最小值<k. 题解: RMQ先处理出每个区间的最大值和最小值(复杂度为:n×logn),相 ...

  8. HDU - 5289:Assignment(单调队列||二分+RMQ||二分+线段树)

    Tom owns a company and he is the boss. There are n staffs which are numbered from 1 to n in this com ...

  9. HDU 6047 Maximum Sequence (贪心+单调队列)

    题意:给定一个序列,让你构造出一个序列,满足条件,且最大.条件是 选取一个ai <= max{a[b[j], j]-j} 析:贪心,贪心策略就是先尽量产生大的,所以就是对于B序列尽量从头开始,由 ...

随机推荐

  1. Java NIO Buffer说明

    Buffer 有3个重要的参数:位置(position).容量(capactiy).上限(limit) 位置(position): 写:当前缓冲区的位置,将从position的下一个位置写数据. 读: ...

  2. 企业级分布式监控系统--zabbix

    目录 1.Zabbix简介 2.zabbix安装 3.工作原理 4.监控功能 5.监控系统架构 6.Zabbix系统架构 7.Zabbix组件构成 8.zabbix监控环境中基本概念 正文 回到顶部 ...

  3. 深入理解Redis——(总纲)

    前言 Redis这个东西,我来来回回的也搞了好几遍,之前更偏向于实战,很多时候只知其然而不知其所以然,最近借阅了一本<深入理解Redis>,就系统的整理一下. 为何选择Redis 开源免费 ...

  4. Git教程(3)git工作区与文件状态及简单示例

    基础 目录: working driectory  工作目录,就是我们的工作目录,其中包括未跟踪文件及暂存区和仓库目录. staging area   暂存区,不对应一个具体目录,其实只是git di ...

  5. 微信小程序特殊字符转义方法——&转义&amp;等等

    在我编写公司小程序的过程中,有一次在网页端添加了一张图片,结果在小程序端访问失败了,究其原因,竟然是因为该图片名称中有一个“&”符号,网页端添加后,自动转义成了“&”存储到了数据库.当 ...

  6. HttpServletResponse对象,自己学习的心得

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象,和代表响应response对象. request和response对象既然代表请求和响应,那我们要 ...

  7. 闲谈Spring-IOC容器

    闲聊 无论是做j2ee开发还是做j2se开发,spring都是一把大刀.当下流行的ssh三大框架中,spring是最不可替代的,如果不用hibernate和struts,我觉得都无关紧要,但是不能没有 ...

  8. python3设置打开文件的编码

    f = open(file_path,'r',encoding='utf8') 用起来很方便,不需要先读取再转码了.

  9. Dll中的方法向外返回dynamic类型可能会失败

    如果Dll中有某个类的方法返回dynamic实例,并且dynamic对象实际实例为匿名类类型,则Dll的外部使用者可能最终无法正常使用此dynamic对象.当使用此dynamic对象时,可能会遇到x属 ...

  10. 【sqli-labs】 less27 GET- Error based -All you Union&Select Belong to us -String -Single quote(GET型基于错误的去除了Union和Select的单引号字符型注入)

    看一下过滤函数 看一下/s是什么东西 那直接通过大小写就可以绕过了 http://192.168.136.128/sqli-labs-master/Less-27/?id=0'%a0uNion%a0s ...