最近状态有点颓,刷刷水题找找自信。

首先每次询问就是完全背包。可以 $O(m^2)$。

由于每个物品都可以用无数次,所以对于价格相同的物品,我们只用考虑愉悦度最高的。

直接上线段树。$val[i]$ 表示这个区间中价格为 $i$ 的物品中最大的愉悦度。如果没有这样的物品就是 -INF。

询问就把这个区间的所有 $val$ 取出来,做个完全背包就好了。

两种修改操作用个标记随便搞搞。分别是区间的每个数组平移,和区间加。

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

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=,INF=1e9;
#define lson o<<1,l,mid
#define rson o<<1|1,mid+1,r
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define ROF(i,a,b) for(int i=(a);i>=(b);i--)
#define MEM(x,v) memset(x,v,sizeof(x))
inline int read(){
char ch=getchar();int x=,f=;
while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
return f?-x:x;
}
int n,m,q,c[maxn],v[maxn],tmp[],ctag[maxn*],vtag[maxn*];
ll f[];
struct node{
int val[];
bool vis[];
node operator+(const node &nd)const{
node ans;
ans.val[]=-INF;
FOR(i,,m) ans.val[i]=max(val[i],nd.val[i]);
return ans;
}
}seg[maxn*];
inline void setc(int o,int v){
FOR(i,,m) tmp[(i+v-)%m+]=seg[o].val[i];
FOR(i,,m) seg[o].val[i]=tmp[i];
ctag[o]=(ctag[o]+v)%m;
}
inline void setv(int o,int v){
FOR(i,,m) seg[o].val[i]+=v;
vtag[o]+=v;
}
inline void pushdown(int o){
if(ctag[o]){
setc(o<<,ctag[o]);
setc(o<<|,ctag[o]);
ctag[o]=;
}
if(vtag[o]){
setv(o<<,vtag[o]);
setv(o<<|,vtag[o]);
vtag[o]=;
}
}
void build(int o,int l,int r){
if(l==r){
FOR(i,,m) seg[o].val[i]=-INF;
seg[o].val[c[l]]=v[l];
return;
}
int mid=(l+r)>>;
build(lson);build(rson);
seg[o]=seg[o<<]+seg[o<<|];
}
void updatec(int o,int l,int r,int ql,int qr,int v){
if(l>=ql && r<=qr) return void(setc(o,v));
pushdown(o);
int mid=(l+r)>>;
if(mid>=ql) updatec(lson,ql,qr,v);
if(mid<qr) updatec(rson,ql,qr,v);
seg[o]=seg[o<<]+seg[o<<|];
}
void updatev(int o,int l,int r,int ql,int qr,int v){
if(l>=ql && r<=qr) return void(setv(o,v));
pushdown(o);
int mid=(l+r)>>;
if(mid>=ql) updatev(lson,ql,qr,v);
if(mid<qr) updatev(rson,ql,qr,v);
seg[o]=seg[o<<]+seg[o<<|];
}
node query(int o,int l,int r,int ql,int qr){
if(l>=ql && r<=qr) return seg[o];
pushdown(o);
int mid=(l+r)>>;
if(mid<ql) return query(rson,ql,qr);
if(mid>=qr) return query(lson,ql,qr);
return query(lson,ql,qr)+query(rson,ql,qr);
}
int main(){
n=read();m=read();
FOR(i,,n) c[i]=read();
FOR(i,,n) v[i]=read();
build(,,n);
q=read();
while(q--){
int op=read(),l=read(),r=read();
if(op==) updatec(,,n,l,r,read());
else if(op==) updatev(,,n,l,r,read());
else{
node ans=query(,,n,l,r);
FOR(i,,m) f[i]=;
FOR(i,,m) FOR(j,,i) f[i]=max(f[i],f[i-j]+max(,ans.val[j]));
ll s1=,s2=;
FOR(i,,m) s1+=f[i],s2^=f[i];
printf("%lld %lld\n",s1,s2);
}
}
}

[THUPC2018]弗雷兹的玩具商店(线段树,背包)的更多相关文章

  1. [THUPC2018] 弗雷兹的玩具商店

    link $solution:$ 好久没写数据结构了,那就写道简单题吧! 可以发现 $m\leq 50$,所以可以去取在 $[l,r]$ 中当价格相同时愉悦值最高的做完全背包 $dp$ . 发现修改价 ...

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

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

  3. bzoj 1307/1318 玩具 线段树+记录时间戳

    玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 743  Solved: 404[Submit][Status][Discuss] Descrip ...

  4. 2019.01.13 bzoj4137: [FJOI2015]火星商店问题(线段树分治+可持久化01trie)

    传送门 题意:序列上有nnn个商店,有两种事件会发生: sss商店上进购标价为vvv的一个物品 求编号为[l,r][l,r][l,r]之间的位置买ddd天内新进购的所有物品与一个数xxx异或值的最大值 ...

  5. bzoj 4137 [FJOI2015]火星商店问题——线段树分治+可持久化01trie树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4137 关于可持久化01trie树:https://www.cnblogs.com/LadyL ...

  6. 【BZOJ4137】火星商店问题(线段树分治,可持久化Trie)

    [BZOJ4137]火星商店问题(线段树分治,可持久化Trie) 题面 洛谷 BZOJ权限题 题解 显然可以树套树,外层线段树,内层可持久化Trie来做. 所以我们需要更加优美的做法.--线段树分治. ...

  7. [FJOI2015]火星商店问题(线段树分治,可持久化,Trie树)

    [FJOI2015]火星商店问题 前天考了到线段树分治模板题,全场都切了,就我不会QAQ 于是切题无数的Tyher巨巨就告诉我:"你可以去看看火星商店问题,看了你就会了." 第一道 ...

  8. 【洛谷4585】[FJOI2015] 火星商店问题(线段树分治)

    点此看题面 大致题意: 有\(n\)家店,每个商品有一个标价.每天,都可能有某家商店进货,也可能有某人去购物.一个人在购物时,会于编号在区间\([L_i,R_i]\)的商店里挑选一件进货\(d_i\) ...

  9. 【题解】P4585 [FJOI2015]火星商店问题(线段树套Trie树)

    [题解]P4585 [FJOI2015]火星商店问题(线段树套Trie树) 语文没学好不要写省选题面!!!! 题目大意: 有\(n\)个集合,每个集合有个任意时刻都可用的初始元素.现在有\(m\)个操 ...

随机推荐

  1. 运维相关指标数据采集并ES入仓 - 运维笔记

    为了进行数字化IT治理,需要对一些应用进程相关指标进行采集并入库.收集到的应用指标数据最好要进行ES入仓,入到Kafka里面,并通过Kibana可视化展示. 需要进行采集的应用进程相关指标如下: ES ...

  2. APP兼容性测试 (二) 最新 iPhone 机型分辨率总结

    iPhone手机发布时间及iOS发布 iPhone是美国苹果公司研发的智能手机系列,搭载苹果公司研发的iOS操作系统. 第一代iPhone于2007年1月9日由苹果公司前首席执行官史蒂夫·乔布斯发布, ...

  3. 【转】asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程

    最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionl ...

  4. 基于OceanStor Dorado V3存储之数据保护 Hyper 特性

    基于OceanStor Dorado V3存储之数据保护 Hyper 特性 1.1  快照 1.2  HyperCDP 1.3  HyperCopy 1.4  克隆(HyperClone) 1.5   ...

  5. Spring源码系列 — BeanDefinition扩展点

    前言 前文介绍了Spring Bean的生命周期,也算是XML IOC系列的完结.但是Spring的博大精深,还有很多盲点需要摸索.整合前面的系列文章,从Resource到BeanDefinition ...

  6. 工作笔记--adb命令篇

    1.抓log方法 (bat文件) mkdir D:\logcatset /p miaoshu=请描述操作:adb logcat -v threadtime > D:\logcat\%miaosh ...

  7. ASP.NET Core系列:日志

    1. NLog 添加安装包: Install-Package NLog.Web.AspNetCore <?xml version="1.0" encoding="u ...

  8. FCC-学习笔记 Missing letters

    FCC-学习笔记  Missing letters 1>最近在学习和练习FCC的题目.这个真的比较的好,推荐给大家. 2>中文版的地址:https://www.freecodecamp.c ...

  9. maven 学习---使用Maven创建Java项目

    在本教程中,我们将向你展示如何使用 Maven 来创建一个 Java 项目,导入其到Eclipse IDE,并打包 Java 项目到一个 JAR 文件. 所需要的工具: Maven 3.3.3 Ecl ...

  10. OC-RunLoop运行循环

    RunLoop--运行循环 作用:死循环,保证程序不退出:监听事件 (所有事件都是有它监听的):等待用户的交互: 特性: ios中所有的事件监听全部由运行循环负责: 主线程的RunLoop在应用启动的 ...