link

$solution:$

好久没写数据结构了,那就写道简单题吧!

可以发现 $m\leq 50$,所以可以去取在 $[l,r]$ 中当价格相同时愉悦值最高的做完全背包 $dp$ 。

发现修改价格与愉悦值修改操作可以在线段树上维护,只要暴力修改在乱搞一下即可。

时间复杂度 $O(nm\log n+q\times m^2)$ 。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
inline int read(){
int f=,ans=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
return f*ans;
}
const int MAXN=;
struct Node{
int val[];
void clear(){memset(val,-/,sizeof(val));}
}tmp[MAXN<<];
int n,m;
Node operator+(Node x1,Node x2){
Node x3;
for(int i=;i<=m;i++) x3.val[i]=max(x1.val[i],x2.val[i]);
return x3;
}
int w[MAXN],c[MAXN];
int tagw[MAXN<<],tagc[MAXN<<];
struct Segment{
void debug(Node t1){
for(int i=;i<=m;i++) printf("val(%d):%d\n",i,t1.val[i]);
return;
}
void build(int k,int l,int r){
if(l==r){
tmp[k].clear();
tmp[k].val[w[l]]=c[l];
return;
}
int mid=l+r>>;
build(k<<,l,mid),build(k<<|,mid+,r);
tmp[k]=tmp[k<<]+tmp[k<<|];
return;
}
Node Mw(int ps,int d){
if(!d) return tmp[ps];
Node t1;t1.clear();
for(int i=;i<=m;i++){
if((i+d)%m==) t1.val[m]=tmp[ps].val[i];
else t1.val[(i+d)%m]=tmp[ps].val[i];
}
return t1;
}
Node Mc(int ps,int d){
Node t1=tmp[ps];
for(int i=;i<=m;i++) t1.val[i]+=d;return t1;
}
void pushdownw(int k){
tmp[k<<]=Mw(k<<,tagw[k]),tmp[k<<|]=Mw(k<<|,tagw[k]);
tagw[k<<]+=tagw[k],tagw[k<<|]+=tagw[k];
tagw[k]=;return;
}
void pushdownc(int k){
tmp[k<<]=Mc(k<<,tagc[k]),tmp[k<<|]=Mc(k<<|,tagc[k]);
tagc[k<<]+=tagc[k],tagc[k<<|]+=tagc[k];
tagc[k]=;return;
}
void modify_w(int k,int l,int r,int x,int y,int d){
if(x<=l&&r<=y){
tmp[k]=Mw(k,d);
tagw[k]+=d;return;
}
pushdownw(k);
pushdownc(k);
int mid=l+r>>;
if(x<=mid) modify_w(k<<,l,mid,x,y,d);
if(mid<y) modify_w(k<<|,mid+,r,x,y,d);
tmp[k]=tmp[k<<]+tmp[k<<|];return;
}
void modify_c(int k,int l,int r,int x,int y,int d){
if(x<=l&&r<=y){
tmp[k]=Mc(k,d);
tagc[k]+=d;return;
}
pushdownw(k);
pushdownc(k);
int mid=l+r>>;
if(x<=mid) modify_c(k<<,l,mid,x,y,d);
if(mid<y) modify_c(k<<|,mid+,r,x,y,d);
tmp[k]=tmp[k<<]+tmp[k<<|];
return;
}
Node Query(int k,int l,int r,int x,int y){
if(x<=l&&r<=y) return tmp[k];
pushdownw(k),pushdownc(k);
int mid=l+r>>;Node res;res.clear();
if(x<=mid) res=res+Query(k<<,l,mid,x,y);
if(mid<y) res=res+Query(k<<|,mid+,r,x,y);
tmp[k]=tmp[k<<]+tmp[k<<|];
return res;
}
}segment;
int q,f[];
signed main(){
// freopen("1.in","r",stdin);
n=read(),m=read();
for(int i=;i<=n;i++) w[i]=read();
for(int i=;i<=n;i++) c[i]=read();
q=read();
segment.build(,,n);
while(q--){
int opt=read(),l=read(),r=read();
if(opt==){
int d=read();
segment.modify_w(,,n,l,r,d);
}
if(opt==){
int d=read();
segment.modify_c(,,n,l,r,d);
}
if(opt==){
memset(f,-/,sizeof(f));
f[]=;
Node g=segment.Query(,,n,l,r);
for(int i=;i<=m;i++)
for(int j=i;j<=m;j++) f[j]=max(f[j],f[j-i]+g.val[i]);
int sum=,Xor=;
for(int i=;i<=m;i++) f[i]=max(f[i],f[i-]);
for(int i=;i<=m;i++) sum+=f[i],Xor^=f[i];
printf("%lld %lld\n",sum,Xor);
}
}
}

[THUPC2018] 弗雷兹的玩具商店的更多相关文章

  1. [THUPC2018]弗雷兹的玩具商店(线段树,背包)

    最近状态有点颓,刷刷水题找找自信. 首先每次询问就是完全背包.可以 $O(m^2)$. 由于每个物品都可以用无数次,所以对于价格相同的物品,我们只用考虑愉悦度最高的. 直接上线段树.$val[i]$ ...

  2. 【LibreOJ】#6396. 「THUPC2018」弗雷兹的玩具商店 / Toyshop 线段树+完全背包

    [题目]#6396. 「THUPC2018」弗雷兹的玩具商店 / Toyshop [题意]给定一个长度为n的物品序列,每个物品有价值.不超过m的重量.要求支持以下三种操作:1.物品价值区间加减,2.物 ...

  3. THUPC2018看题总结

    THUPC2018看题总结 #6387. 「THUPC2018」绿绿与串串 / String 据说是签到题啊. 首先根据题目的意思,我们发现如果能找到那个最后一次选择的对称轴岂不是美滋滋. 自然地,我 ...

  4. 《how to design programs》9.3处理任意长度的表

    假定一个玩具商店要把货物库存清单存放在计算机之中,这样,店里的员工就可以快速判断商店里是否还有某种玩具存货.简言之,商店需要一个能够检查库存是否含有玩具'doll 的函数contains-doll?, ...

  5. 《美国纽约摄影学院摄影教材》PDF教材

        下载地址: 美国纽约摄影学院摄影教材(上册).pdf 美国纽约摄影学院摄影教材(下册).pdf 欢迎你到纽约摄影学院来,我们急切地等待着开课,你们也在 跃跃欲试了.那就让我们马上开始吧! 你已 ...

  6. 性感天才黑客乔治·霍兹George Hotz 17岁打脸乔布斯20岁搞疯索尼

    1.国内外著名黑客信息 1) 国外著名黑客 George Hotz 乔治·霍兹(George Hotz,1989年10月2日-),美国学生,2007年8月解锁苹果(Apple)iPhone手机,使得i ...

  7. Expo大作战(十九)--expo打包后,发布分用程序到商店的注意事项

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  8. zstu4273 玩具 2017-03-22 14:18 49人阅读 评论(0) 收藏

    4273: 玩具 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 700  Solved: 129 Description 商店有n个玩具,第i个玩具有 ...

  9. 玩具(toy)

    题目 试题2:玩具(toy) 源代码:toy.cpp 输入文件:toy.in 输出文件:toy.out 时间限制:1s 空间限制:256MB 题目描述 商店正在出售小C最喜欢的系列玩具,在接下来的n周 ...

随机推荐

  1. DUBBO原理、应用与面经总结

    研读dubbo源码已经有一段时间了,dubbo中有非常多优秀的设计模式和示例代码值得学习,但是dubbo的调用层级和方法链都较为繁杂,如果不对源码思路进行梳理则很容易忘却,因此总结一篇研读心得,从阅读 ...

  2. table表格 td设置固定宽度

    table宽度自适应,而且部分TD是固定宽度. 只需要将固定宽设死,留下一列不设置宽度,将table宽度设置为100%. table-layout:fixed 作用不是很清楚 <table wi ...

  3. 对postcss以及less和sass的研究

    1.postcss PostCSS 的主要功能只有两个:第一个就是前面提到的把 CSS 解析成 JavaScript 可以操作的 抽象语法树结构(Abstract Syntax Tree,AST),第 ...

  4. 快速掌握Eclipse Plugin / RCP开发思想

    本文转载:https://my.oschina.net/drjones/blog/280337 引言 本文不是快速入门的文章,只面向有一定基础的开发人员,至少看这篇文章之前你应该了解什么是Eclips ...

  5. Math.min() Math.max() Math.min().apply() Math.max() .apply()该如何使用???

    Math.min()和 Math.max()  语法: Math.min(x,y) Math.max(x,y) 虽然能取到最小值和最大值,但是不支持数组. 那么如何计算数组中的大小值呢???????? ...

  6. 使用vue 3.0 初始化vue脚手架

    vue-cli3.0安装 如果你事先已经全局安装了旧版本的vue-cli(1.x 或 2.x),你需要先卸载它: npm uninstall vue-cli -g 安装 npm install -g ...

  7. HRESULT: 0x80040228

    When run the arcgis engine codes in the console application, may come to the exception: HRESULT: 0x8 ...

  8. 15 Spring Boot Shiro 验证码

    1. <dependency> <groupId>com.github.axet</groupId> <artifactId>kaptcha</a ...

  9. Apache编译教程

    手工编译安装Apache, 版本httpd-2.4.29(免费提供安装包,懒人福利:提供安装脚本):https://blog.51cto.com/13728740/2158576 编译安装apache ...

  10. CF1019E Raining season

    https://www.luogu.org/problemnew/show/CF1019E 题解 \[ dis=day*a+b \] \[ b=-day*a+dis \] 然后就变成了斜率优化. 考虑 ...