#线段树分治,背包#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 ...
随机推荐
- 并发慎用——System.currentTimeMillis()
好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受. System.currentTimeMillis()是极其常用的基础Java API,广泛地用来获取时间戳或测量代码 ...
- 【.Net Core】.Net Core 源码分析与深入理解 - 入口 Program.cs (一)
研究原因:学习 .Net Core 两年有余,实际项目也使用了一年半,自己的技术已经到了瓶颈,需要有一个突破,我觉得首先研究架构师的设计思想,其次分析一下.Net Core的源码,这将会是一个很好的学 ...
- 苹果工程师对iOS线程开发的那点事津津乐道
pthread,Thread总结 pthread: 通用的多线程API 使用方法 // 1. 创建线程: 定义一个pthread_t类型变量 pthread_t thread; // 2. 开启线程: ...
- 扣子(coze.cn)| 由浅入深,手把手带你实现Java转型学习助手
扣子(coze.cn)是一款用来开发新一代 AI Chat Bot 的应用编辑平台,无论你是否有编程基础,都可以通过这个平台来快速创建各种类型的 Chat Bot,并将其发布到各类社交平台和通讯软件上 ...
- ThreadPoolExecutor和Executors的区别
Executors创建的线程有两类 newFixedThreadPool和newSingleThreadExecutor,队列数量弹性,创建的线程的队列最大值为INTEGER.max容易造成OOM n ...
- 【Azure 环境】Azure 流分析服务(Steam Analytics) 报出 OutputDataConversionError 错误引起延迟及超时
问题描述 Azure 流分析服务(Steam Analytics) 报出 OutputDataConversionError 错误引起延迟及超时. 查看详细错误: 问题解答 在错误消息中,有非常明确的 ...
- 1. zookeeper简介与应用场景
1.1 zookeeper介绍 zookeeper是一个高可用的分布式管理与协调框架,基于ZAB算法(原子消息广播协议)的实现. 能够很好保证分布式环境中数据的一致性.正是基于这样的特性,使得zo ...
- git 取消代理无效?试试这个
git 取消代理的命令操作 git conifg --global --unset http.proxy git conifg --global --unset https.proxy 一般情况下这种 ...
- hire 聘用 受雇 租金 单词记忆
hire 基本解释 vt. 聘用:录用:雇用:租用 vi. 受雇:得到工作 n. 租金:酬金,工钱:[非正式用语] 被雇佣的人:销售部的两个新雇员 来自Proto-Germanic*hurjan,租, ...
- j-link仿真器的作用和价值以及Ubuntu下使用注意事项
一 J-LINK是什么? J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器.配合IAR EWAR,ADS,KEIL,WINARM,RealView等集成开发环境支持所有A ...