回滚线段树+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 ...
随机推荐
- hdu 5792 线段树+离散化+思维
题目大意: Given a sequence A with length n,count how many quadruple (a,b,c,d) satisfies: a≠b≠c≠d,1≤a< ...
- java des 加密/解密
JAVA实现 加密 注意:DES加密和解密过程中,密钥长度都必须是8的倍数 public byte[] desCrypto(byte[] datasource, String password) { ...
- kNN算法和决策树
的整数. 下面看书上给出的实例: from numpy import * import operator def createdataset(): group=array([[1.0,1.1],[1. ...
- Spring Boot 集成Mybatis实现多数据源
静态的方式 我们以两套配置方式为例,在项目中有两套配置文件,两套mapper,两套SqlSessionFactory,各自处理各自的业务,这个两套mapper都可以进行增删改查的操作,在这两个主MYS ...
- 【JZOJ3920】噪音
description FJ有M个牛棚,编号1至M,刚开始所有牛棚都是空的.FJ有N头牛,编号1至N,这N头牛按照编号从小到大依次排队走进牛棚,每一天只有一头奶牛走进牛棚.第i头奶牛选择走进第p[i] ...
- AcWing 156. 矩阵 (哈希二维转一维查询)打卡
给定一个M行N列的01矩阵(只包含数字0或1的矩阵),再执行Q次询问,每次询问给出一个A行B列的01矩阵,求该矩阵是否在原矩阵中出现过. 输入格式 第一行四个整数M,N,A,B. 接下来一个M行N列的 ...
- jQuery Validate (1)
一.用前必备官方网站:http://bassistance.de/jquery-plugins/jquery-plugin-validation/ API: http://jquery.bassist ...
- legend2---开发日志16
legend2---开发日志16 一.总结 一句话总结: 编程敲代码,一定要把 关系弄清楚,关系不弄清楚,很容易敲错,比如:如何求无限级分类的博客的数据的数目 弄清楚关系式:自己总数量=孩子总数量+自 ...
- MySql在建立索引优化时需要注意的问题
MySql在建立索引优化时需要注意的问题 设计好MySql的索引可以让你的数据库飞起来,大大的提高数据库效率.设计MySql索引的时候有一下几点注意: 1,创建索引 对于查询占主要的应用来说,索引显得 ...
- 记录解决java.io.IOException: Server returned HTTP response code: 500 for URL:xxxxxxxx
踩坑经历 因为项目需要去对接别的接口,使用URLConnection POST请求https接口,发送json数组时遇到java.io.IOException: Server returned HTT ...