#线段树分治,背包#CF601E A Museum Robbery
题目
有 \(n\) 个展品正在被展览,每一个展品都有一价值 \(v\) 个和一个混乱度 \(w\) ,现在有 \(m\) 次操作:
1 \(v\) \(w\) :加入一个新的展品,价值为\(v\),混乱度为\(w\)
2 \(x\) :删除第\(x\)个展品(一开始的展品也参与编号,且保证此展品此时存在)
3 :进行询问
记 \(s(m)\) 为询问时混乱度之和不超过m的展品集合价值的最大值,
对于每一个询问,只需输出\(\sum_{m=1}^{k}s(m)*p^{m-1}\pmod q\)
其中,\(p=10^{7}+19,q=10^{9}+7\)
分析
删除操作很难做,考虑线段树分治,
对于每个时间点更新背包即可
时间复杂度\(O(mk\log_2 m)\)
代码
#include <cstdio>
#include <cctype>
#include <vector>
#include <cstring>
#define rr register
using namespace std;
const int mod=1000000007,p=10000019;
const int N=20011,M=1011;
struct rec{int c,w,l,r;}q[N];
int P[M],dp[M],n,m,T; vector<int>K[N<<2];
inline signed iut(){
rr int ans=0,f=1; rr char c=getchar();
while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans*f;
}
inline void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
inline signed mo(int x,int y){return x+y>=mod?x+y-mod:x+y;}
inline void update(int k,int l,int r,int x,int y,int z){
if (l==x&&r==y) {K[k].push_back(z); return;}
rr int mid=(l+r)>>1;
if (y<=mid) update(k<<1,l,mid,x,y,z);
else if (x>mid) update(k<<1|1,mid+1,r,x,y,z);
else update(k<<1,l,mid,x,mid,z),update(k<<1|1,mid+1,r,mid+1,y,z);
}
inline void dfs(int k,int l,int r){
rr int len=K[k].size(),f[M];
for (rr int i=0;i<len;++i){
rr rec t=q[K[k][i]];
for (rr int j=m;j>=t.w;--j)
dp[j]=max(dp[j],dp[j-t.w]+t.c);
}
if (l==r){
rr int ans=0;
for (rr int j=1;j<=m;++j)
ans=mo(ans,1ll*dp[j]*P[j-1]%mod);
print(ans),putchar(10);
return;
}
rr int mid=(l+r)>>1;
memcpy(f,dp,sizeof(f));
dfs(k<<1,l,mid);
memcpy(dp,f,sizeof(dp));
dfs(k<<1|1,mid+1,r);
}
signed main(){
P[0]=1;
for (rr int i=1;i<M;++i)
P[i]=1ll*P[i-1]*p%mod;
n=iut(),m=iut();
for (rr int i=1;i<=n;++i) q[i]=(rec){iut(),iut(),0,-2};
for (rr int Q=iut();Q;--Q){
rr int opt=iut();
if (opt==3) ++T;
else if (opt==1)
q[++n]=(rec){iut(),iut(),T,-2};
else q[iut()].r=T-1;
}
for (rr int i=1;i<=n;++i) if (q[i].r==-2) q[i].r=T-1;
for (rr int i=1;i<=n;++i)
if (q[i].l<=q[i].r)
update(1,0,T-1,q[i].l,q[i].r,i);
dfs(1,0,T-1);
return 0;
}
#线段树分治,背包#CF601E A Museum Robbery的更多相关文章
- 【题解】【LibreOJ Round #6】花团 LOJ 534 时间线段树分治 背包
Prelude 题目链接:萌萌哒传送门(/≧▽≦)/ Solution 如果完全离线的话,可以直接用时间线段树分治来做,复杂度\(O(qv \log q)\). 现在在线了怎么办呢? 这其实是个假在线 ...
- 2019.01.13 loj#6515. 贪玩蓝月(线段树分治+01背包)
传送门 题意简述:有一个初始为空的双端队列,每次可以在队首和队尾插入或弹出一个二元组(wi,vi)(w_i,v_i)(wi,vi),支持询问从当前队列中选取若干个元素是的他们的和对 MODMODM ...
- 【线段树分治 01背包】loj#6515. 「雅礼集训 2018 Day10」贪玩蓝月
考试时候怎么就是没想到线段树分治呢? 题目描述 <贪玩蓝月>是目前最火爆的网页游戏.在游戏中每个角色都有若干装备,每件装备有一个特征值 $w$ 和一个战斗力 $v$ .在每种特定的情况下, ...
- CF1442D Sum (动态规划,线段树分治)
( 宋 体 字 看 起 来 真 舒 服 ) _{_{(宋体字看起来真舒服)}} (宋体字看起来真舒服) 题 面 ( 洛 谷 翻 译 ) 题面_{_{(洛谷翻译)}} 题面(洛谷翻译) 给定 n ...
- loj#2312. 「HAOI2017」八纵八横(线性基 线段树分治)
题意 题目链接 Sol 线性基+线段树分治板子题.. 调起来有点自闭.. #include<bits/stdc++.h> #define fi first #define se secon ...
- BZOJ.4184.shallot(线段树分治 线性基)
BZOJ 裸的线段树分治+线性基,就是跑的巨慢_(:з」∠)_ . 不知道他们都写的什么=-= //41652kb 11920ms #include <map> #include < ...
- BZOJ.4137.[FJOI2015]火星商店问题(线段树分治 可持久化Trie)
BZOJ 洛谷 一直觉得自己非常zz呢.现在看来是真的=-= 注意题意描述有点问题,可以看BZOJ/洛谷讨论. 每个询问有两个限制区间,一是时间限制\([t-d+1,t]\),二是物品限制\([L,R ...
- 洛谷.3733.[HAOI2017]八纵八横(线性基 线段树分治 bitset)
LOJ 洛谷 最基本的思路同BZOJ2115 Xor,将图中所有环的异或和插入线性基,求一下线性基中数的异或最大值. 用bitset优化一下,暴力的复杂度是\(O(\frac{qmL^2}{w})\) ...
- bzoj4025二分图(线段树分治 并查集)
/* 思维难度几乎没有, 就是线段树分治check二分图 判断是否为二分图可以通过维护lct看看是否链接出奇环 然后发现不用lct, 并查集维护奇偶性即可 但是复杂度明明一样哈 */ #include ...
- BZOJ3237:[AHOI2013]连通图(线段树分治,并查集)
Description Input Output Sample Input 4 5 1 2 2 3 3 4 4 1 2 4 3 1 5 2 2 3 2 1 2 Sample Output Connec ...
随机推荐
- AI数字人SadTalker实战
1.概述 AI数字人在营销和品牌推广中扮演着至关重要的角色,许多企业和个人正积极利用数字技术来打造属于自己的财富.有没有一种简单而免费的方式来创建自己的数字人呢?本篇博客笔者将为大家介绍如何搭建属于自 ...
- nftables语法及例子
先上我自己实际测试通过的例子,用例子便于在实践中学习: # 0 --- 说明 ---下面例子中的单引号目的是为了避免nftable参数中的星号.花括号.分号等符号被shell展开解释掉了,导致nft命 ...
- 使用OpenTelemetry进行监控
工具介绍 注意:该部分介绍摘抄自:https://www.aiwanyun.cn/archives/174 Prometheus.Grafana.Node Exporter 和Alertmanager ...
- 在winform中如何嵌入第三方软件窗体✨
相关win32api的学习 SetParent [DllImport("user32.dll ", EntryPoint = "SetParent")] pri ...
- SSK:超级键盘模拟器,调用底层,可模拟所有按键
SSK - 吵架键盘模拟器 SuperSimulator of Keyboard 调用系统底层,能够模拟所有键盘操作! 本程序结合快Key(QuicKeys智能登录助手)一起使用,能够创造更多奇迹! ...
- Abp.Zero 手机号免密登录验证与号码绑定功能的实现(三):Vue网页端开发
前端代码的框架采用vue.js + elementUI 这套较为简单的方式实现,以及typescript语法更方便阅读. 首先来编写发送验证码函数, 登录,绑定,解绑的业务都需要发送验证码功能,通过c ...
- Spring 知识点
Spring Spring 是什么? Spring为了解决企业级应用的复杂性而创建,简化开发. 如下简化: 基于POJO的轻量级和最小侵入性编程: 以IoC(控制反转).DI(依赖注入)和面向接口实现 ...
- 协议I2C
SCL SDA 同步,半双工 开漏+弱上拉,谁用这跟线,就下拉成低电平 想输出,去拉杆子或放手,操作杆子变化 想输入,直接放手,看电平高低就行 线与,一个低电平,全部低电平,可以利用这个执行多 ...
- go-view 依赖库
go-view 依赖库 打包es5 由于当前node版本是 16.18 最新版本的不支持,所以装个老版的 npm install @vitejs/plugin-legacy@4.0.4 --save- ...
- 摆脱鼠标系列 - vscode - 页内 Ctrl + F 搜索完 回车下一个,选到后按 Esc退回到编辑状态
为什么 这个很基础,但是没有细细整理 摆脱鼠标系列 - vscode - 页内 Ctrl + F 搜索完 回车下一个,选到后按 Esc退回到编辑状态 之前还找了个快捷键 Alt + Enter,发现冲 ...