[THUPC2018] 弗雷兹的玩具商店
$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] 弗雷兹的玩具商店的更多相关文章
- [THUPC2018]弗雷兹的玩具商店(线段树,背包)
最近状态有点颓,刷刷水题找找自信. 首先每次询问就是完全背包.可以 $O(m^2)$. 由于每个物品都可以用无数次,所以对于价格相同的物品,我们只用考虑愉悦度最高的. 直接上线段树.$val[i]$ ...
- 【LibreOJ】#6396. 「THUPC2018」弗雷兹的玩具商店 / Toyshop 线段树+完全背包
[题目]#6396. 「THUPC2018」弗雷兹的玩具商店 / Toyshop [题意]给定一个长度为n的物品序列,每个物品有价值.不超过m的重量.要求支持以下三种操作:1.物品价值区间加减,2.物 ...
- THUPC2018看题总结
THUPC2018看题总结 #6387. 「THUPC2018」绿绿与串串 / String 据说是签到题啊. 首先根据题目的意思,我们发现如果能找到那个最后一次选择的对称轴岂不是美滋滋. 自然地,我 ...
- 《how to design programs》9.3处理任意长度的表
假定一个玩具商店要把货物库存清单存放在计算机之中,这样,店里的员工就可以快速判断商店里是否还有某种玩具存货.简言之,商店需要一个能够检查库存是否含有玩具'doll 的函数contains-doll?, ...
- 《美国纽约摄影学院摄影教材》PDF教材
下载地址: 美国纽约摄影学院摄影教材(上册).pdf 美国纽约摄影学院摄影教材(下册).pdf 欢迎你到纽约摄影学院来,我们急切地等待着开课,你们也在 跃跃欲试了.那就让我们马上开始吧! 你已 ...
- 性感天才黑客乔治·霍兹George Hotz 17岁打脸乔布斯20岁搞疯索尼
1.国内外著名黑客信息 1) 国外著名黑客 George Hotz 乔治·霍兹(George Hotz,1989年10月2日-),美国学生,2007年8月解锁苹果(Apple)iPhone手机,使得i ...
- Expo大作战(十九)--expo打包后,发布分用程序到商店的注意事项
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- zstu4273 玩具 2017-03-22 14:18 49人阅读 评论(0) 收藏
4273: 玩具 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 700 Solved: 129 Description 商店有n个玩具,第i个玩具有 ...
- 玩具(toy)
题目 试题2:玩具(toy) 源代码:toy.cpp 输入文件:toy.in 输出文件:toy.out 时间限制:1s 空间限制:256MB 题目描述 商店正在出售小C最喜欢的系列玩具,在接下来的n周 ...
随机推荐
- java -jar 和 java -cp 区别
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/12022527.html Project Directory SRC MainTest.java pac ...
- win10 64 位安装 MySQL(mysql-5.7.17-winx64)
版权声明:本文为搜集借鉴各类文章的原创文章,转载请注明出处:http://www.cnblogs.com/2186009311CFF/p/6517470.html. win10 64 位安装 MySQ ...
- 用 IDEA工具导入SVN项目。 步骤一:选择VCS
Intellij IDEA是目前主流的IDE开发工具,工程项目导入也是必不可少的操作,本文讲述如何用 IDEA工具导入SVN项目. 步骤一:选择VCS 步骤二:打开SVN Repositories 在 ...
- luogu 2698 [USACO12MAR]花盆Flowerpot 单调队列
刷水~ Code: #include<bits/stdc++.h> using namespace std; #define setIO(s) freopen(s".in&quo ...
- 【bzoj2073】【[POI2004]PRZ】位运算枚举子集的特技
(上不了p站我要死了) Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍在桥上的人都不能超过一 ...
- [洛谷P3938]:斐波那契(fibonacci)(数学)
题目传送门 题目描述 小$C$养了一些很可爱的兔子.有一天,小$C$突然发现兔子们都是严格按照伟大的数学家斐波那契提出的模型来进行繁衍:一对兔子从出生后第二个月起,每个月刚开始的时候都会产下一对小兔子 ...
- Java 中如何使用clone()方法克隆对象?
java为什么要 对象克隆: 在程序开发时,有时可能会遇到以下情况:已经存在一个对象A,现在需要一个与A对象完全相同的B 对象,并对B 对象的属性值进行修改,但是A 对象原有的属性值不能改变.这时,如 ...
- Linux双网卡绑定和解除
转载双网卡绑定和解除 一定要在服务管理中关闭NetworkManager服务并禁用自动启动,因为NetworkManager服务是实时生效的,一旦设置错,管理员就得回到机房接显示器配置网络连接. 以 ...
- skip a transaction in goldengate
skip a transaction in goldengate [oracle@db ]$ ggsci Oracle GoldenGate Command Interpreter for Oracl ...
- Bash is an sh-compatible command language interpreter that executes commands read from the standard input or from a file.
w https://linux.die.net/man/1/bash bash - GNU Bourne-Again SHell Description Bash is an sh-compatibl ...