4299: Codechef FRBSUM Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 550  Solved: 351[Submit][Status][Discuss] Description 数集S的ForbiddenSum定义为无法用S的某个子集(可以为空)的和表示的最小的非负整数. 例如,S={1,1,3,7},则它的子集和中包含0(S’=∅),1(S’={1}),2(S’={1,1}),3(S’={3}),4(S’={1,3}),5(…
[BZOJ4408][FJOI2016]神秘数(主席树) 题面 BZOJ 洛谷 题解 考虑只有一次询问. 我们把所有数排个序,假设当前可以表示出的最大数是\(x\). 起始\(x=0\). 依次考虑接下来的每个数\(a_i\),如果\(a_i\le x\),那么没有啥问题,\(x+=a_i\). 如果\(a_i=x+1\),那么也没有问题,\(x+=a_i\). 如果\(a_i>x\),那么\(x+1\)就拼不出来了. 那么显然考虑每次询问,首先把所有\(\le x\)的数全部加进来,然后考虑下…
Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13}, 1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = 4+1 6 = 4+1+1 7 = 4+1+1+1 8无法表示为集合S的子集的和,故集合S的神秘数为8. 现给定n个正整数a[1]..a[n],m个询问,每次询问给定一个区间l,r,求由a[l],a[l+1],-,a[r]所构成的可重复数字集合的神秘数. Input 第一行一个整数n,表示数字个数.…
题目链接 BZOJ4408 题解 假如我们已经求出一个集合所能凑出连续数的最大区间\([1,max]\),那么此时答案为\(max + 1\) 那么我们此时加入一个数\(x\),假若\(x > max + 1\),显然对答案没有影响 但是假若\(x \le max + 1\),显然最大区间变为\([1,max + x]\),答案变为\(max + x + 1\) 那么我们就能得出这题的解法了 将区间内的数排序,一开始\(ans = 0\),然后逐一将数加入集合之中, 一但出现\(x > max…
题面 洛谷 题解 考虑暴力,对于询问中的一段区间\([l,r]\),我们先将其中的数升序排序,假设当前可以表示出\([1,k]\)目前处理\(a_i\),假如\(a_i>k+1\),则答案就是\(k+1\),否则,调整右界到\(k+a_i\). 考虑如何优化,还是扫到了\([1,k]\),假设\(ans=k+1\),如果所有小于等于\(ans\)的数的和\(sum\)起来大于等于\(ans\),则一定可以将\(k\)更新成\(sum\).否则直接输出就好了. 以上这个过程很明显可以用主席树维护,…
Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数. 例如S={1,1,1,4,13}, 1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = 4+1 6 = 4+1+1 7 = 4+1+1+1 8无法表示为集合S的子集的和,故集合S的神秘数为8. 现给定n个正整数a[1]..a[n],m个询问,每次询问给定一个区间l,r,求由a[l],a[l+1],-,a[r]所构成的可重复数字集合的神秘数. Hint 对于100%的数据点,n,m <…
好久没打主席树了,都忘了怎么用了...... 假设我们选了一些数能构成[0,x]范围内的所有值,下一个要加的数是k(k<=x+1),那么可以取到[0,x+k]内的所有取值,所以有一种做法: 对于每个询问区间,先排序,依次加入k,k<=x+1时,取到[0,x+k]:k>x+1,则x+1不能取到,就是答案.复杂度O(mnlogn). 更优做法: [0,x]拼成,令ans=x+1,统计在[1,x+1]范围内的数之和sum,如果sum>=ans,说明肯定有一个未加入的数在[1,x+1]之内…
传送门 BZOJ 然而是权限题 洛谷 Solution 发现题目给出的一些规律,emm,如果我们新凑出来的一个数,那么后面一个数一定是\(sum+1\). 于是就可以主席树随便维护了! 代码实现 #include<bits/stdc++.h> using namespace std; inline int gi(){int x;scanf("%d",&x);return x;} const int N=100010; int rt[N],tot; int n,a[N…
[BZOJ4408][Fjoi 2016]神秘数 Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13},1 = 12 = 1+13 = 1+1+14 = 45 = 4+16 = 4+1+17 = 4+1+1+18无法表示为集合S的子集的和,故集合S的神秘数为8.现给定n个正整数a[1]..a[n],m个询问,每次询问给定一个区间[l,r](l<=r),求由a[l],a[l+1],…,a[r]所构成的可重复数字集合的神秘数…
「FJOI2016」神秘数 这题不sb,我挺sb的... 我连不带区间的都不会哇 考虑给你一个整数集,如何求这个神秘数 这有点像一个01背包,复杂度和值域有关.但是你发现01背包可以求出更多的东西,就是每个值是否可以被表示,而这个问题有点像问你一个单点的是否可以被表示,这是它的特殊性. 我们把这个整数集排序后,假设当前表示的区间是\([1,x]\),这时候在线加入\(a\) 如果\(a\le x\),显然值域变成\([1,x+a]\),否则答案假设\(x+1\) 考虑如何优化这个过程,我们可不可…