当前位置: 首页 > news >正文

hdu 4122 Alice#39;s mooncake shop (线段树)

题目大意:

一个月饼店每一个小时做出月饼的花费不一样。

储存起来要钱。最多存多久。问你把全部订单做完的最少花费。


思路分析:

ans = segma( num[]*(cost[] + (i-j)*s) )

整理一下会发现式子就是  

cost[]-j*s + i*s 

对于每个订单,我们把i拿出来分析

所以也就用cost - j*s 建树。

然后在储存期间找到最小的花费即可了。


#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#define lson num<<1,s,mid
#define rson num<<1|1,mid+1,e
#define maxn 2555
#define maxm 100005
#define inf 0x3f3f3f3f
using namespace std;
typedef long long LL;

int n,m;
int days[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
                {0,31,29,31,30,31,30,31,31,30,31,30,31}};
string tab[] = {"","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
LL tre[maxm<<2];

int getmonth(string x)
{
    for(int i=1;i<=12;i++)
    if(x==tab[i])return i;
}
bool leap(int x)
{
    if(((x%4==0) && x%100!=0) || x%400==0)return true;
    return false;
}
LL gethour(int month,int day,int year,int hour)
{
    LL res=day-1;
    int is=leap(year);
    for(int i=1;i<month;i++)res+=days[is][i];
    for(int i=2000;i<year;i++)
    res+=365+leap(i);
    res*=24;
    res+=hour+1;
    return res;
}
void build(int num,int s,int e)
{
    tre[num]=inf;
    if(s==e)return;
    int mid=(s+e)>>1;
    build(lson);
    build(rson);
}
void update(int num,int s,int e,int pos,LL val)
{
    if(s==e)
    {
        tre[num]=val;
        return;
    }
    int mid=(s+e)>>1;
    if(pos<=mid)update(lson,pos,val);
    else update(rson,pos,val);
    tre[num]=min(tre[num<<1],tre[num<<1|1]);
}
LL query(int num,int s,int e,int l,int r)
{
    if(l<=s && r>=e)
    {
        return tre[num];
    }
    int mid=(s+e)>>1;
    if(r<=mid)return query(lson,l,r);
    else if(l>mid)return query(rson,l,r);
    else return min(query(lson,l,mid),query(rson,mid+1,r));
}

string tmp;
LL num[maxn];
LL cost[maxm];
LL time[maxm];
int main()
{
    while(cin>>n>>m)
    {
        if(n==0 && m==0)break;
        for(int i=1;i<=n;i++)
        {
            int d,y,h,Num;
            cin>>tmp;
            cin>>d>>y>>h>>Num;
            num[i]=Num;
            time[i]=gethour(getmonth(tmp),d,y,h);
        }
        LL S,T;
        build(1,1,m);
        cin>>T>>S;
        for(int i=1;i<=m;i++)
        {
            cin>>cost[i];
            cost[i]-=i*S;
            update(1,1,m,i,cost[i]);
        }
        LL ans=0;
        for(int i=1;i<=n;i++)
        {
            if(time[i]>m)break;
            ans+=num[i]*(query(1,1,m,max(1LL,time[i]-T+1),time[i])+time[i]*S);
        }
        cout<<ans<<endl;
    }
    return 0;
}


相关文章:

  • 三栏布局总结
  • date命令使用文档
  • Qproces的启动
  • [MAC OS] 常用工具
  • Template.
  • Scrum培训心得体会
  • java基础讲解12-----Swing
  • javascript匿名函数及闭包深入理解及应用
  • 如何看懂ORACLE执行计划
  • 关于研发团队建设的一点思考
  • 线程安全-Lock锁synchronized
  • 前端自动化解决方案
  • win2008重新生成SID
  • WebView进度条
  • GitLab安装
  • 【node学习】协程
  • 【译】理解JavaScript:new 关键字
  • Angular 4.x 动态创建组件
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Git学习与使用心得(1)—— 初始化
  • js操作时间(持续更新)
  • sessionStorage和localStorage
  • supervisor 永不挂掉的进程 安装以及使用
  • TypeScript迭代器
  • 从重复到重用
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 使用Swoole加速Laravel(正式环境中)
  • 温故知新之javascript面向对象
  • 学习Vue.js的五个小例子
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (转) 深度模型优化性能 调参
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)编辑寄语:因为爱心,所以美丽
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .Net 8.0 新的变化
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET/C# 使用反射注册事件
  • .Net环境下的缓存技术介绍
  • [20160807][系统设计的三次迭代]
  • [20180129]bash显示path环境变量.txt
  • [Android]How to use FFmpeg to decode Android f...
  • [Codeforces1137D]Cooperative Game
  • [EFI]DELL XPS13 9360电脑 Hackintosh 黑苹果efi引导文件
  • [EFI]MSI GF63 Thin 9SCXR电脑 Hackintosh 黑苹果efi引导文件
  • [EMWIN]FRAMEWIN 与 WINDOW 的使用注意
  • [FFmpeg学习]从视频中获取图片