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. js原生高逼格插件

    如何定义一个高逼格的原生JS插件 作为一个前端er,如果不会写一个小插件,都不好意思说自己是混前端界的.写还不能依赖jquery之类的工具库,否则装得不够高端.那么,如何才能装起来让自己看起来逼格更高 ...

  2. nyoj 952 : 最大四边形 (计算几何)

    题目链接 任意四边形均可看作是两个三角形拼接得到的(即使是凹四边形),故 可以O(n^2)枚举所有的线段,然后对每条线段O(n)枚举线段端点外的其他点,用来更新以此线段构成的三角形的有向面积的最大值m ...

  3. python 布尔判断并做需要的返回值

  4. Spring源码构建

    1.下载spring源码并解压 https://codeload.github.com/spring-projects/spring-framework/zip/v5.0.2.RELEASE 打开bu ...

  5. 什么是npm ? 什么是node ? 什么是vue-cli ?什么是webpack ?

  6. mysql INNER JOIN关键字 语法

    mysql INNER JOIN关键字 语法 作用:在表中存在至少一个匹配时,INNER JOIN 关键字返回行.大理石平台维修 语法:SELECT column_name(s) FROM table ...

  7. Linux内核设计与实现 总结笔记(第十章)内核同步方法

    一.原子操作 原子操作可以保证指令以原子的方式执行----执行过程不被打断. 1.1 原子整数操作 针对整数的原子操作只能对atomic_t类型的数据进行处理. 首先,让原子函数只接收atomic_t ...

  8. cf 118B

    B. Present from Lena time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  9. JSP XML数据处理

    JSP XML数据处理 当通过HTTP发送XML数据时,就有必要使用JSP来处理传入和流出的XML文档了,比如RSS文档.作为一个XML文档,它仅仅只是一堆文本而已,使用JSP创建XML文档并不比创建 ...

  10. [design pattern](2) Observer

    前言 在上一个博客中我们介绍了Strategy模式,它是行为型模式麾下的一员大将.那么本博客我们来学习一下行为型模式麾下的另一员大将Observer模式. 思考题 老套路,先来思考下面的问题: 问题: ...