#线段树分治,背包#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 ...
随机推荐
- Google Test Adapter安装
背景 我有一个vs2015 的gtest 工程,编译完成后,需要gtest adapter帮我把测试列表显示出来,但是通过vs自带的工具或者网页下载安装遇到2个问题: 1.下载速度超级慢,慢到我能到火 ...
- 【Azure 应用服务】Python Function App重新部署后,出现 Azure Functions runtime is unreachable 错误
问题描述 Python Function App重新部署后,出现 Azure Functions runtime is unreachable 错误 问题解答 在Function App的门户页面中, ...
- 从零开始学Spring Boot系列-集成MySQL
在Spring Boot中集成MySQL是为了让开发者能够轻松地与MySQL数据库进行交互.本篇文章将指导你如何在Spring Boot 3.2.3项目中使用Gradle来集成MySQL.在此之前,我 ...
- [Linux] 无显示器 无键盘 网线直连传输文件
有显示器可以操作 这种情况下要简单的多,基本思想是,网线直连之后让其中一方当作网关,分配好ip地址,比如说192.168.8.1,网关也是192.168.8.1即可,如果要填写子网掩码就写255.25 ...
- Tomcat8.5简介
1. Tomcat简介[1] Apache Tomcat是Servlet/JSP的容器.Tomcat8.5 实现了由 JCP 组织 (Java Community Process) 制定的Servle ...
- C++ STL 容器-array类型
C++ STL 容器-array类型 array是C++11STL封装的数组,内存分配在栈中stack,绝对不会重新分配,随机访问 创建和初始化 // 下面的等同于int a[10]; std::ar ...
- 深入解析ASP.NET Core MVC应用的模块化设计[上篇]
ASP.NET Core MVC的"模块化"设计使我们可以构成应用的基本单元Controller定义在任意的模块(程序集)中,并在运行时动态加载和卸载.这种为"飞行中的飞 ...
- 修改html5 placeholder文字默认颜色
注意: 1.input后面的冒号不要写错! 2.-moz后面是没有input字样,火狐设置字体颜色为#000,但是他不是全黑,好像有个度似的!(个人认为) input:-ms-input-placeh ...
- ReentrantLock原理CAS+AQS队列
ReentrantLock主要利用CAS+AQS队列来实现.它支持公平锁和非公平锁,两者的实现类似. CAS:Compare and Swap,比较并交换.CAS有3个操作数:内存值V.预期值A.要修 ...
- 10、zookeeper客户端curator
curator介绍 https://blog.csdn.net/wo541075754/article/details/68067872 关于第三方客户端的小介绍 zkClient有对dubbo的一些 ...