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 ...
随机推荐
- 在Linux上部署Nginx,反向代理tornado的WebSite
1.安装 Nginx yum install -y nginx 2. 修改nginx配置文件 cd /etc/nginx/ mv nginx.conf nginx.conf.swf mv nginx. ...
- ZT:我们身边大多数的事都是暂时性的
1. 家庭放在首位. 2. 戒酒能有助于身体健康. 3. 经常跑步以及运动有益于身心健康. 4. 保证心胸开阔.让爱自动来到你的身边,而不需要你自己去拼命寻找. 5. 区分优秀的导师和老师.不断提升自 ...
- DP&图论 DAY 3 上午
DP&图论 DAY 3 上午 状态压缩dp >状态压缩dp ◦状态压缩是设计dp状态的一种方式.◦当普通的dp状态维数很多(或者说维数与输入数据有关),但每一维总量很少是,可以将多维 ...
- http1.1管线话 vs htttp2.0 多路复用
图中第一种请求方式,就是单次发送request请求,收到response后再进行下一次请求,显示是很低效的. 于是http1.1提出了管线化(pipelining)技术,就是如图中第二中请求方式,一次 ...
- python内存泄露memory leak排查记录
问题描述 A服务,是一个检测MGR集群主节点是否发生变化的服务,使用python语言实现的. 针对每个集群,主线程会创建一个子线程,并由子线程去检测.子线程会频繁的创建和销毁. 上线以后,由于经常会有 ...
- Sticky广播
sticky广播通过Context.sendStickyBroadcast()函数来发送,用此函数发送的广播会一直滞留,当有匹配此广播的广播接收器被注册后,该广播接收器就会收到此条信息. 使用此函数需 ...
- springboot2.0双数据源配置
题记:由于项目中不只是用一个数据库,所以记下以免忘记. 1.首先展示目录结构 2.pom配置文件 <?xml version="1.0" encoding="UTF ...
- 学习前端第二天心得体会(初步了解HTML5的部分API以及画布Canvas)
一.HTML5部分API 1.选择器querySelector和querySelectorAll 1.1.querySelector:返回文档中匹配指定的CSS选择器的第一元素. document. ...
- vue中html、js、vue文件之间的简单引用与关系
有关vue文件记录:index.html在html中运用组件 <body> <app></app> <!-- 此处app的组件为入口js main.js中定义 ...
- 內部作业 OH01 0001710000 无价格可确定
在CO15报工时,提示:“內部作業 OH01 0001710000 無價格可確定” 出现以上错误信息,表示没有在KP26维护价格, 只需要进入KP26维护成本中心和作业类型的价格即可, 具体操作如下图 ...