luogu P3826 [NOI2017]蔬菜
那个第一次购买有\(s_i\)奖励,可以看成是多一种蔬菜\(i+n\),权值为\(w_i+s_i\),每天减少量\(x\)为0个,保质期\(\lceil\frac{c_i}{x_i}\rceil\),数量为1的蔬菜,同时要把原来的\(c_i\)减一
现在考虑只有一组询问,我们贪心的想,应该先把价值最高的给卖了.所以按照权值从大到小排序.然后当前这种菜显然能在保质期期限内堆在后面卖就在后面卖,这样对后面保质期段的菜更优,那么就是从保质期那天开始往前推,记录能放的菜的数量,每天能放就放,还有就是每往前一天能卖的菜数量增加\(x_i\).为了保证复杂度,应该在这种菜后面没有增加量的时候退出,并且要跳过中间过程卖菜数量满的一些天,这个可以并查集实现,每个点记录这个点往前最近的能卖菜的一天
然后考虑多组询问,先把最大天数的答案求出来,然后从\(i+1\)天的答案推出第\(i\)天的答案.如果后一天总共卖菜的数量\(>i*m\),那么就把卖出去的菜中权值最小的若干个丢掉.正确性,一种菜能在后面的天卖出去,那就更能在前面的天卖出去,所以倒推是合法的
#include<bits/stdc++.h>
#define LL long long
#define uLL unsigned long long
#define db double
using namespace std;
const int N=2e5+10,lm=1e5;
LL rd()
{
LL x=0,w=1;char ch=0;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int ff[N];
int findf(int x){return ff[x]==x?x:ff[x]=findf(ff[x]);}
int n,m,q,w[N],dt[N],rs[N],xx[N],sq[N],sl[N];
LL an[N],smy[N*10],ts;
int gnm(int i,int j){return rs[i]+xx[i]*(dt[i]-j);}
bool cmp(int aa,int bb){return w[aa]>w[bb];}
int main()
{
n=rd(),m=rd(),q=rd();
for(int i=1;i<=n;++i)
{
w[i]=rd();
int sd=rd(),nm=rd();
xx[i]=rd();
dt[i]=xx[i]?(nm+xx[i]-1)/xx[i]:lm+1;
rs[i]=dt[i]<=lm?(nm-1)%xx[i]+1:(xx[i]?xx[i]:nm);
dt[i]=min(dt[i],lm);
w[i+n]=w[i]+sd;
dt[i+n]=dt[i],rs[i+n]=1,--rs[i];
}
for(int i=1;i<=lm;++i) ff[i]=i,sl[i]=m;
for(int i=1;i<=n+n;++i) sq[i]=i;
sort(sq+1,sq+n+n+1,cmp);
for(int i=1;i<=n+n;++i)
{
int x=sq[i],nw=findf(dt[x]),bb=0;
while(nw&&bb<gnm(x,1))
{
int aa=gnm(x,nw)-bb,py=min(aa,sl[nw]);
an[lm]+=1ll*py*w[x],bb+=py,sl[nw]-=py;
while(py--) smy[++ts]=w[x];
if(!sl[nw]) ff[nw]=nw-1;
nw=findf(nw-1);
if(x>n) break;
}
}
sort(smy+1,smy+ts+1);
reverse(smy+1,smy+ts+1);
for(int i=lm-1;i;--i)
{
an[i]=an[i+1];
while(ts>i*m) an[i]-=smy[ts--];
}
while(q--) printf("%lld\n",an[rd()]);
return 0;
}
luogu P3826 [NOI2017]蔬菜的更多相关文章
- P3826 [NOI2017]蔬菜
传送门 注意每一单位蔬菜的变质时间是固定的,不随销售发生变化 固定的...... 就是每一个单位的蔬菜在哪一天变质是早就定好了的 发现从第一天推到最后一天很不好搞 考虑反过来,从最后一天推到第一天,这 ...
- [NOI2017]蔬菜
[NOI2017]蔬菜 题目描述 大意就是有\(n\)种物品,第\(i\)个物品有\(c_i\)个,单价是\(a_i\).然后每天你可以卖出最多\(m\)个物品.每天结束后第\(i\)种物品会减少\( ...
- BZOJ4946[Noi2017]蔬菜——线段树+堆+模拟费用流
题目链接: [Noi2017]蔬菜 题目大意:有$n$种蔬菜,每种蔬菜有$c_{i}$个,每种蔬菜每天有$x_{i}$个单位会坏掉(准确来说每天每种蔬菜坏掉的量是$x_{i}-$当天这种蔬菜卖出量), ...
- 【BZOJ4946】[NOI2017]蔬菜(贪心)
[BZOJ4946][NOI2017]蔬菜(贪心) 题面 BZOJ 洛谷 UOJ 题解 忽然发现今年\(NOI\)之前的时候切往年\(NOI\)的题目,就\(2017\)年的根本不知道怎么下手(一定是 ...
- bzoj4946: [Noi2017]蔬菜 神烦贪心
题目链接 bzoj4946: [Noi2017]蔬菜 题解 挺神的贪心 把第次买的蔬菜拆出来,记下每种蔬菜到期的日期,填第一单位蔬菜比其他的要晚 按价格排序后,贪心的往前面可以填的位置填就可以了.找可 ...
- 4946: [Noi2017]蔬菜
4946: [Noi2017]蔬菜 http://www.lydsy.com/JudgeOnline/upload/Noi2017D2.pdf 分析: 贪心. 首先可以将一个蔬菜拆成两个,一个是有加成 ...
- [NOI2017]蔬菜 贪心
题面: [NOI2017]蔬菜 题解: 首先每天蔬菜会变质这点并不好处理,我们考虑让时间倒流,从后向前处理,这样的话就相当于每天都会得到一定量的蔬菜. 这样做有什么好处呢? 我们可以发现一个性质:如果 ...
- [Luogu P3825] [NOI2017] 游戏 (2-SAT)
[Luogu P3825] [NOI2017] 游戏 (2-SAT) 题面 题面较长,略 分析 看到这些约束,应该想到这是类似2-SAT的问题.但是x地图很麻烦,因为k-SAT问题在k>2的时候 ...
- BZOJ4946 & 洛谷3826 & UOJ318:[NOI2017]蔬菜——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4946 https://www.luogu.org/problemnew/show/P3826 ht ...
随机推荐
- 快速理解arguments对象
在js中一切都是对象,连函数也是对象,函数名其实是引用函数定义对象的变量. 1.什么是arguments? 这个函数体内的arguments非常特殊,实际上是所在函数的一个内置类数组对象,可以用数组的 ...
- UFLDL(Unsupervised Feature Learning and Deep Learning)
UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大学的 Andrew Ng 教授及其团队编写的一套 ...
- smarty 模板中输出时间戳为年月日格式
日期:{:date('Y-m-d',$v['addtime'])} // $v['addtime']数据库中的时间戳 输出结果: 日期:{:date('Y-m-d H:i:s',$v['addtim ...
- T89379 【qbxt】复读警告
T89379 [qbxt]复读警告 题解 这是一道DP题 设置状态 f[ i ][ j ] 前 i 个数中所选数字之和 % key 得 j 的最大方案数 当前我们该选择第 i 个数字了,那么这个数 ...
- react源码之render
1.最近学习react源码,刚刚入门,看了render的原理,到了fiberRoot的创建 如图:
- 集成学习之Adaboost算法原理
在boosting系列算法中,Adaboost是最著名的算法之一.Adaboost既可以用作分类,也可以用作回归. 1. boosting算法基本原理 集成学习原理中,boosting系列算法的思想:
- FTP\SFTP连接命令
五.ftp连接 输入:ftp 10.18.49.19 2121六.输入账号密码 zhangsan/sdjg34t#七.输入:ls 查看文件是否上传 如上传 输入:bye ...
- log4j日志配置文件
log4j.properties: ### 设置### log4j.rootLogger = debug,stdout,D,E ### 输出信息到控制抬 ### log4j.appender.stdo ...
- 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_3 响应之返回值是void类型
定义先的标签 返回void 测试默认的跳转 虽然是404但是方法执行了. 默认请求了 testVoid.jsp这个页面.请求路径叫什么 就访问哪个jsp页面. 使用request请求转发 抛出的异常 ...
- 跨平台python异步回调机制实现和使用方法
跨平台python异步回调机制实现和使用方法 这篇文章主要介绍了python异步回调机制的实现方法,提供了使用方法代码 1 将下面代码拷贝到一个文件,命名为asyncore.py 代码如下: impo ...