[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周 ...
随机推荐
- ESP8266-向物联网云平台发送数据--dweet
方法一: //向物联网平台发送数据 //发送数据格式: https://dweet.io/dweet/for/my-thing-name?hello=world 免费平台 //my-thing-nam ...
- layui js动态添加的面板不能折叠
layui 动态添加dom后一般调用 layer.form.render()更新dom就可以了,但是我动态添加一个面板后form.render()就没有效果,要用layui.element.rende ...
- SpringBoot整合AOP
一.创建LogComponent类 类上加上@Component和@Aspect 表示把该类注册成spring组件和aop 二.创建6个方法 2.1 @Poin ...
- 理解厂商前缀 -webkit- / -moz- / -ms- / -o-
CSS3规范如果想要达到W3C的推荐标准状态还需要不断改进.浏览器则通常在W3C开发标准的过程中就会体现这些特性.这样,标准在最终敲定之前就能知道哪些地方还能进一步改进. 在包含某个特性的的初始阶段, ...
- PHP文件操作基本代码
PHP中提供了一系列的I/O函数,能简捷地实现我们所需要的功能,包括文件系统操作和目录操作(如“复制[copy]”).下面兄弟连PHP培训 小编给大家介绍的是基本的文件读写操作:(1)读文件 ;(2) ...
- mysql RIGHT JOIN关键字 语法
mysql RIGHT JOIN关键字 语法 作用:RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行.惠州大理石 ...
- Oralce动态的创建按月的分区
说明: XXX为一个配置表,里面配置了要分区的表明,即CODENO = 'PARTITIONTABLENAME',只有每个月月底的时候,才会进入IF的判断,此外还有一个定时任务,每天去执行即可. 存储 ...
- 【bzoj1093】 [ZJOI2007]最大半连通子图
*题目描述: 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意 两点u,v,存在一条u到v的有向路径或者从v到u的有向路 ...
- D - Find Integer
D - Find Integer $a^{n}+b^{n}=c^{n}$ 给定a,n求解$b,c$ 三次以上没有整数解 #include<bits/stdc++.h> using name ...
- [CSP-S模拟测试]:骆驼(模拟+构造)
题目描述 我们都熟悉走马步,现在我们定义一种新的移动方式——骆驼步,它在一个国际棋盘上的移动规则是这样的. 以看出,骆驼步可以向八个方向走动,且不能走出棋盘范围. 现在给出一个$N\times N$的 ...