noi2017 day2t2
设a[i]为当前方案中第 1..i 天变质的蔬菜有几个,b[i]为前i天至少能卖出几个,方案可行的条件是对任意i有a[i]<=b[i],用线段树维护b[i]-a[i]。
从小到大枚举天数,枚举到第w天时,对所有u>=w,b[u]+=m,表示第w天从可以卖0个变为m个
选一个蔬菜,在第w天变质,则相当于对所有u>=w,a[u]+=1,因此必须保证w在b[i]-a[i]的最右一个零点的右侧
对每种蔬菜都贪心先取变质时间晚的,用另一颗线段树维护变质时间>=w的最大价值,每次贪心选可行的价值最大的一个更新答案
可以构造一个等价的费用流模型,从而证明贪心的正确性
#include<bits/stdc++.h>
const int N=1e5+;
typedef long long i64;
char ib[N*],*ip=ib,ob[N*],*op=ob;
int _(){
int x=;
while(*ip<)++ip;
while(*ip>)x=x*+*ip++-;
return x;
}
void pr(i64 x){
int ss[],sp=;
do ss[++sp]=x%+;while(x/=);
while(sp)*op++=ss[sp--];
*op++=;
}
int max(int a,int b){return a>b?a:b;}
int min(int a,int b){return a<b?a:b;}
int n,m,qp;
i64 as[N],ans=;
int qs[N],md=;
struct item{
int a,s,c,x;
void R(){
a=_(),s=_(),c=_(),x=_();
a+=s;
}
void ins();
void dec(){
ans+=a;
--c;
if(s)a-=s,s=;
}
int tm(){
if(!x)return md;
return min(md,(c+x-)/x);
}
bool operator<(const item&i)const{return a>i.a;}
}is[N];
std::multiset<item>st[N];
int tr[<<|],mx=;
void up(int x){
tr[mx+x]=st[x].size()?st[x].begin()->a:;
for(x=mx+x>>;x;x>>=)tr[x]=max(tr[x<<],tr[x<<^]);
}
void item::ins(){
if(c<=)return;
int x=tm();
st[x].insert(*this);
up(x);
}
void maxs(int&a,int b){if(a<b)a=b;}
void mins(int&a,int b){if(a>b)a=b;}
int _l,_a;
struct node{
node*lc,*rc;
int L,R,M;
int v,a,p;
void add(int x){
v+=x,a+=x;
}
void add(){
if(_l<=L)return add(_a);
dn();
if(_l<=M)lc->add();
rc->add();
up();
}
void dn(){
if(a){
lc->add(a);
rc->add(a);
a=;
}
}
void up(){
v=rc->v,p=rc->p;
if(lc->v<v)v=lc->v,p=lc->p;
}
}ns[N*],*np=ns,*rt;
node*build(int L,int R){
node*w=np++;
w->L=L,w->R=R;
w->p=R;
if(L<R){
int M=w->M=L+R>>;
w->lc=build(L,M);
w->rc=build(M+,R);
}
return w;
}
bool chk(int pos){
int mw=;
for(int w=mx+pos-;w;w>>=)if((~w&)&&tr[w+]>tr[mw])mw=w+;
if(!mw)return ;
for(;mw<mx;mw<<=,mw+=(tr[mw]<tr[mw+]));
mw-=mx;
item i=*st[mw].begin();
st[mw].erase(st[mw].begin());up(mw);
i.dec();
i.ins();
_l=mw,_a=-,rt->add();
return ;
}
int main(){
fread(ib,,sizeof(ib),stdin);
n=_();m=_();qp=_();
for(int i=;i<n;++i)is[i].R();
for(int i=;i<qp;++i)maxs(md,qs[i]=_());
rt=build(,md);
for(mx=;mx<=md+;mx<<=);
for(int i=;i<n;++i)is[i].ins();
for(int i=;i<=md;++i){
_l=i,_a=m,rt->add();
while(){
int pos=rt->v?:rt->p+;
if(pos>n||!chk(pos))break;
}
as[i]=ans;
}
for(int i=;i<qp;++i)pr(as[qs[i]]);
fwrite(ob,,op-ob,stdout);
return ;
}
noi2017 day2t2的更多相关文章
- NOIP 2012 Day2T2 借教室题解
NOIP 2012 Day2T2 借教室题解 题目传送门:http://codevs.cn/problem/1217/ 题目描述 Description 在大学期间,经常需要租借教室.大到院系举办活动 ...
- LOJ_2305_「NOI2017」游戏 _2-sat
LOJ_2305_「NOI2017」游戏 _2-sat 题意: 给你一个长度为n的字符串S,其中第i个字符为a表示第i个地图只能用B,C两种赛车,为b表示第i个地图只能用A,C两种赛车,为c表示第i个 ...
- [NOI2017]蔬菜
[NOI2017]蔬菜 题目描述 大意就是有\(n\)种物品,第\(i\)个物品有\(c_i\)个,单价是\(a_i\).然后每天你可以卖出最多\(m\)个物品.每天结束后第\(i\)种物品会减少\( ...
- BZOJ4946[Noi2017]蔬菜——线段树+堆+模拟费用流
题目链接: [Noi2017]蔬菜 题目大意:有$n$种蔬菜,每种蔬菜有$c_{i}$个,每种蔬菜每天有$x_{i}$个单位会坏掉(准确来说每天每种蔬菜坏掉的量是$x_{i}-$当天这种蔬菜卖出量), ...
- [NOI2017]游戏(2-SAT)
这是约半年前写的题解了,就搬过来吧 感觉这是NOI2017最水的一题(当然我还是不会2333),因为是一道裸的2-SAT.我就是看着这道题学的2-SAT 算法一:暴力枚举.对于abc二进制枚举,对于x ...
- 【BZOJ4946】[NOI2017]蔬菜(贪心)
[BZOJ4946][NOI2017]蔬菜(贪心) 题面 BZOJ 洛谷 UOJ 题解 忽然发现今年\(NOI\)之前的时候切往年\(NOI\)的题目,就\(2017\)年的根本不知道怎么下手(一定是 ...
- [NOI2017]泳池——概率DP+线性递推
[NOI2017]泳池 实在没有思路啊~~~ luogu题解 1.差分,转化成至多k的概率减去至多k-1的概率.这样就不用记录“有没有出现k”这个信息了 2.n是1e9,感觉要递推然后利用数列的加速技 ...
- bzoj4946: [Noi2017]蔬菜 神烦贪心
题目链接 bzoj4946: [Noi2017]蔬菜 题解 挺神的贪心 把第次买的蔬菜拆出来,记下每种蔬菜到期的日期,填第一单位蔬菜比其他的要晚 按价格排序后,贪心的往前面可以填的位置填就可以了.找可 ...
- NOI2017 游记
成功在NOI2017退役……现在的我已经是一只退役狗了 结果也一直到了退役,我都还不会半平面交,不会单纯形,不会非旋转版Treap…… FWT我也不熟,分治FFT我也只写过一道板子题 但是现在已经退役 ...
随机推荐
- servlet简单介绍
什么是Servlet? servlet是一种Java编程语言类,用于扩展托管通过请求 - 响应编程模型访问的应用程序的服务器的功能.尽管servlet可以响应任何类型的请求,但它们通常用于扩展Web服 ...
- 图片上传并回显Ajax异步篇
图片上传并回显Ajax异步篇 图片如何无刷新的上传到服务器呢?继前两篇文章后,我们来实战一下如何无刷新的异步上传图片,我们还是先看一下效果 在实战前呢,我们需要做些准备工作.比如说,了解一下FormD ...
- Go Example--锁
package main import ( "fmt" "math/rand" "runtime" "sync" &qu ...
- JQuery注册页面表单检验完善
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- ORM 创建manytomay的三种方法 反向查询 和一些 双下方法版学员管理系统3
老师信息管理 三种创建多对对外键的方式常用第二种和第三种 思考 三种方式创建多对多外键方式及其优缺点. 外键的查询和使用 1外键的创建: 在数据库表中的表现形式 如何连表查询和使用 表里边: s ...
- Pushpin How it works
转自:https://pushpin.org/docs/about/#how-it-works Introduction Pushpin is a reverse proxy server that ...
- supervisor使用总结
简介: Supervisor是一个进程控制系统. 它是一个C/S系统(注意: 其提供WEB接口给用户查询和控制). 它允许用户去监控和控制在类UNIX系统的进程. 它的目标与launchd.daemo ...
- WinForm读取指定的config文件的内容
config文件的使用 一.缘起 最近做项目开始使用C#,因为以前一直使用的是C++,因此面向对象思想方面的知识还是比较全面的,反而是因没有经过完整.系统的.Net方面知识的系统学习,经常被一些在C# ...
- 用Python免费发短信,实现程序实时报警
进入正文 今天跟大家分享的主题是利用python库twilio来免费发送短信. 先放一张成品图: 代码放在了本文最后的地址中 正文 眼尖的小伙伴已经发现了上面的短信的前缀显示这个短信来自于一个叫Twi ...
- create a simple COM object
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAArsAAAGYCAIAAADN0b3QAAAgAElEQVR4nO29749c1b2nW/4Lzh8wUr