回滚线段树+bitset优化01背包——cf981E
/*
首先考虑如何计算一个点的可能凑出的值,这就是一个01可行性背包问题
那么再拓展到一段区间[1..n]的点上,每个query都可以看做是一段区间上的点[l,r]加上一个体积为x的物品,转换到01背包上就是进行一次更新
那么用线段树来维护每个query的区间更新
每个位置(区间)维护一个bitset,每次加入a都进行一次01背包
用线段树来维护区间的bitset,表示一段区间能组成的值
但是没法用lazy,每次区间更新只能停留在一段区间
可以把每次停留在区间的数a用vector保存下来,当进行完所有的更新时,从线段树叶子结点开始向上回滚
每个区间的可行性是左儿子的可行性|右儿子的可行性|vector里存的每个a提供的可行性贡献
*/
#include<bits/stdc++.h>
using namespace std; int n,m; #define maxn 10005
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
struct Node{int l,r,x;}p[maxn];
bitset<>seg[maxn<<];
vector<int>v[maxn<<];
void build(int l,int r,int rt){
seg[rt][]=;
if(l==r)return;
int m=l+r>>;
build(lson);
build(rson);
}
void update(int L,int R,int x,int l,int r,int rt){
if(L<=l && R>=r){
v[rt].push_back(x);
return;
}
int m=l+r>>;
if(L<=m)update(L,R,x,lson);
if(R>m)update(L,R,x,rson);
} void debug(int l,int r,int rt){
cout<<rt<<" "<<l<<" "<<r<<'\n';
for(int i=;i<=n;i++)
cout<<seg[rt][i];
puts("");
} void roll(int l,int r,int rt){
if(l==r){
for(int i=;i<v[rt].size();i++)
seg[rt]|=seg[rt]<<v[rt][i];
//debug(l,r,rt);
return;
}
int m=l+r>>;
roll(lson);
roll(rson);
seg[rt]|=seg[rt<<];
seg[rt]|=seg[rt<<|];
for(int i=;i<v[rt].size();i++){
int a=v[rt][i];
seg[rt]|=seg[rt]<<a;
}
//debug(l,r,rt);
} int main(){
cin>>n>>m;
for(int i=;i<=m;i++)
scanf("%d%d%d",&p[i].l,&p[i].r,&p[i].x);
build(,n,); for(int i=;i<=m;i++)
update(p[i].l,p[i].r,p[i].x,,n,);
roll(,n,); int ans=;
for(int i=;i<=n;i++)
if(seg[][i])ans++; cout<<ans<<'\n';
for(int i=;i<=n;i++)
if(seg[][i])cout<<i<<" ";
}
回滚线段树+bitset优化01背包——cf981E的更多相关文章
- HDU 5808 Price List Strike Back  bitset优化的背包。。水过去了
		
http://acm.hdu.edu.cn/showproblem.php?pid=5808 用bitset<120>dp,表示dp[0] = true,表示0出现过,dp[100] = ...
 - poj 1742 Coins(二进制拆分+bitset优化多重背包)
		
\(Coins\) \(solution:\) 这道题很短,开门见山,很明显的告诉了读者这是一道多重背包.但是这道题的数据范围很不友好,它不允许我们直接将这一题当做01背包去做.于是我们得想一想优化. ...
 - HDU 3732 Ahui Writes Word 多重背包优化01背包
		
题目大意:有n个单词,m的耐心,每个单词有一定的价值,以及学习这个单词所消耗的耐心,耐心消耗完则,无法学习.问能学到的单词的最大价值为多少. 题目思路:很明显的01背包,但如果按常规的方法解决时间复杂 ...
 - 2018 焦作网络赛 K Transport Ship ( 二进制优化 01 背包 )
		
题目链接 题意 : 给出若干个物品的数量和单个的重量.问你能不能刚好组成总重 S 分析 : 由于物品过多.想到二进制优化 其实这篇博客就是存个二进制优化的写法 关于二进制优化的详情.百度一下有更多资料 ...
 - 简单了解Oracle的回滚段
		
因为上一次研究了Oracle的事务一致性,中间查阅资料的时候,看到这个地方与回滚段有关.所以就罗列了以下简单的知识.更为深层次的就不再深挖了,个人感觉对于事务的一致性和隔离级别是开发经理应该了解的,但 ...
 - 01二维背包+bitset优化——hdu5890
		
口胡一种别的解法: 三重退背包,g1[j]k]表示不选x的选了j件物品,体积为k的方案数,g[0][0] = 1 , g1[j][k]=dp[j][k]-g1[j-1][k-a[x]] 然后按这样再退 ...
 - 洛谷 P5527 - [Ynoi2012] NOIP2016 人生巅峰(抽屉原理+bitset 优化背包)
		
洛谷题面传送门 一道挺有意思的题,想到了某一步就很简单,想不到就很毒瘤( 首先看到这样的设问我们显然可以想到背包,具体来说题目等价于对于每个满足 \(i\in[l,r]\) 的 \(a_i\) 赋上一 ...
 - HDU - 6268: Master of Subgraph (分治+bitset优化背包)
		
题意:T组样例,给次给出一个N节点的点权树,以及M,问连通块的点权和sum的情况,输出sum=1到M,用0或者1表示. 思路:背包,N^2,由于是无向的连通块,所以可以用分治优化到NlgN. 然后背包 ...
 - HDU——2191悼念512汶川大地震遇难同胞(多重背包转化为01背包或二进制优化)
		
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
 
随机推荐
- PHP-在排序数组中查找元素的第一个和最后一个位置
			
给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值,返回 [ ...
 - JMeter 服务器监控插件环境配置
			
1.工具准备: jmeter下载地址:(尽量下载老版本如apache-jmeter-2.11,其他的版本比较高,可能和jmeter-plugins不兼容) http://jmeter.apache.o ...
 - promise、async、await、settimeout异步原理与执行顺序
			
一道经典的前端笔试题,你能一眼写出他们的执行结果吗? async function async1() { console.log("async1 start"); await as ...
 - Java中Map集合的基本功能
			
Map基本方法: put方法: remove方法: isEmpty方法: . clear方法: containsKey方法: containsValue方法 size方法: get方法: keySet ...
 - 【leetcode】973. K Closest Points to Origin
			
题目如下: We have a list of points on the plane. Find the Kclosest points to the origin (0, 0). (Here, ...
 - 测试使用python的用途
			
使用Python:1. 分析日志,尤其是服务器端日志.脚本就是短小精悍的2. 用来生成测试数据,比如生成随机的10w个词,很麻烦:如果找一个字库,存在数表里,然后用Python取数据3. 做数据发出的 ...
 - 包管理工具(npm、yarn)
			
npm包管理工具 1. npm的包安装分为本地安装(local).全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已. 2. 这两种安装方式的区别: 本地安装(安装在命令行运行所在 ...
 - [nRF51822 AK II 教程]第一课,开发环境的配置及背景介绍【转】
			
低功耗蓝牙4.0是全新的技术,并不向下兼容,也就是说它和蓝牙3.0.2.0什么的都不能通信的.另外,蓝牙4.0目前的规范只能做外设和主机(智能手机,电脑等)通讯,也就是说你想用一个单模的蓝牙4.0开发 ...
 - 解决spring boot中普通类中使用service为null 的方法
			
我使用的是springboot+mybatisplus +mysql1.创建一个SpringUtil工具类 import org.springframework.beans.BeansExceptio ...
 - JAVA的IO流下载音乐
			
public class DownloadMusic { private static int count = 1; public static void main(String[] args) th ...