题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4122

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#include<string>
using namespace std; const int maxn = ; struct Node
{
int id,val;
}; int order[];
long long R[];
int S,T,N,M; struct Myqueue
{
Node Q[maxn];
int head,tail; void init()
{
head = tail = ;
} void push(int id,int val)
{
while(head < tail && Q[tail-].val+S*(id-Q[tail-].id) >= val)
tail--;
Q[tail].val = val;
Q[tail++].id = id;
} void pop(int id)
{
while(head < tail && Q[head].id < id - T) //单调区间的最小值。
head++;
} Node getfront()
{
return Q[head];
}
}solver; map<string,int> mymap; void init()
{
mymap["Jan"] = ; mymap["Feb"] = ; mymap["Mar"] = ;
mymap["Apr"] = ; mymap["May"] = ; mymap["Jun"] = ;
mymap["Jul"] = ; mymap["Aug"] = ; mymap["Sep"] = ;
mymap["Oct"] = ; mymap["Nov"] = ; mymap["Dec"] = ;
} int mou[] = {,,,,,,,,,,,,};
void GetOrder()
{
string s;
int date,year,H; for(int i=; i<=N; i++)
{
cin>>s;
scanf("%d %d %d %I64d",&date,&year,&H,&R[i]);
int mouth = mymap[s];
year -= ;
order[i] = (*+)*(year/);
year = year%;
if(year == )
{
for(int j=; j<mouth; j++)
{
order[i] += mou[j];
if(j == ) order[i] += ;
}
}
else
{
order[i] += + (year-)*;
for(int j=; j<mouth; j++)
order[i] += mou[j];
}
order[i] += date - ;
order[i] = order[i]* + H + ;
}
}
int main()
{
//freopen("E:\\acm\\input.txt","r",stdin);
init();
while(cin>>N>>M && N+M)
{
GetOrder(); scanf("%d %d",&T,&S);
solver.init(); int cnt = ;
long long ans = ;
for(int i=; i<=M; i++)
{
int cost;
scanf("%d",&cost); solver.push(i,cost);
solver.pop(i); //先去掉过期的 Node cur = solver.getfront();
while(order[cnt] == i && cnt <= N) //cnt的上限,和while循环,考虑了,为啥不加。
{
ans += (cur.val + (i-cur.id)*S ) * R[cnt]; //乘法溢出问题
cnt ++;
}
}
printf("%I64d\n",ans);
}
}

hdu 单调队列的更多相关文章

  1. hdu 3401 单调队列优化DP

    Trade Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  2. 【HDU 3401 Trade】 单调队列优化dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3401 题目大意:现在要你去炒股,给你每天的开盘价值,每股买入价值为ap,卖出价值为bp,每天最多买as ...

  3. HDU 3401 Trade dp+单调队列优化

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3401 Trade Time Limit: 2000/1000 MS (Java/Others)Mem ...

  4. HDU 4122 Alice's mooncake shop 单调队列优化dp

    Alice's mooncake shop Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem ...

  5. HDU 3401 Trade(单调队列优化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3401 题意:炒股.第i天买入一股的价钱api,卖出一股的价钱bpi,最多买入asi股,最多卖出bsi股 ...

  6. HDU 4122 Alice's mooncake shop (单调队列/线段树)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4122 题意:好难读懂,读懂了也好难描述,亲们就自己凑合看看题意把 题解:开始计算每个日期到2000/1/ ...

  7. Hdu 3410 【单调队列】.cpp

    题意: 给出一个数组,问你对于第i个数,从最后一个比它大的数到它之间比它小的数中最大的那个数的下标,以及它右边到第一个比它大的数中比它小的数中最大的那一个数的下标<下标从1开始>. eg: ...

  8. hdu 4122 Alice's mooncake shop(单调队列)

    题目链接:hdu 4122 Alice's mooncake shop 题意: 有n个订单和可以在m小时内制作月饼 接下来是n个订单的信息:需要在mon月,d日,year年,h小时交付订单r个月饼 接 ...

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

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

随机推荐

  1. 使用VirtualBox搭建Pentesterlab环境

    1 简介 VirtualBox 是一款开源虚拟机软件,我们使用它来装载Pentesterlab的镜像文件. 2 VirtualBox安装及配置 VirtualBox的安装项主要是网卡的配置比较麻烦,不 ...

  2. 常用js函数

    1.获得元素到页面的绝对距离 function getPos(obj) { var pos = {left:0, top:0}; while (obj) { pos.left += obj.offse ...

  3. 浏览器信息(Navigator)

    window.navigator 代表正在使用的浏览器的对象. ◆ window.navigator.appCodeName 返回浏览器的代码名."Mozilla" 本来是 Net ...

  4. 初学JqueryMobile(一)

    一.初学2个data标签 标签名称 标签属性 属性说明 备注 data-role page 容器或试图 表示容器的作用 header 标题 content 内容 footer 页脚 data-tran ...

  5. 解决 nginx 返回数据不完整的方法

    通过PHP请求接口时发现接口的内容输出没有完整的返回整个数据,早上只修改了nginx api_metrics插件里的计算response大小的代码,观察日志发现一条: 2012/08/28 02:13 ...

  6. VS2012 独占编辑 设置

    用VS2008建立的项目就有(禁止其他用户签出和签入) 为什么VS2012的项目就没有了呢??(管理员说他什么都没设置)VS2012: 两个项目同样是用VS2012打开的,而第一个是用VS2008创建 ...

  7. 转载“用USBOOT制作DOS启动盘”

    使用软件: Usboot和MaxDOS_5.6s_U盘版. 由于我的U盘容量比较小,暂时只能做DOS启动功能,其它功能如Windows PE,等我以后测试成功后再补充说明. U盘是啥? 读音优盘,可以 ...

  8. Newtonsoft post Json 日期格式处理

     Newtonsoft.Json.Converters.IsoDateTimeConverter DateTimeConverter = new Newtonsoft.Json.Converters. ...

  9. 15个Docker基本命令及用法

    Docker入门教程:15个Docker基本命令及用法   本文中,我们将学习15个Docker命令以及命令的用法和功能,并通过实践学习它是如何工作的. AD:51CTO 网+ 第十二期沙龙:大话数据 ...

  10. 在ajax当中使用url重写来避免url的暴露

    记得一次面试,有这样一道面试题:jsp页面当中需要用到ajax的实现,此时需要调用java的url:此时的问题是如果用户查看页面源码就能看到真是的url,这个问题如何避免.说实话,AJAX我用的只是皮 ...