5255 -- 【FJOI2016】神秘数

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] (l≤r)\),求由 \(a_l,a_{l+1},…,a_r\) 所构成的可重复数字集合的神秘数。

Input

第一行一个整数\(n\),表示数字个数。

第二行$ n \(个整数,从\) 1 $编号。

第三行一个整数 \(m\),表示询问个数。

以下 $m \(行,每行一对整数\) l,r$,表示一个询问。

Output

对于每个询问,输出一行对应的答案。

Sample Input

5

1 2 4 9 10

5

1 1

1 2

1 3

1 4

1 5

Sample Output

2

4

8

8

8

思路有点巧妙啊。

复杂度分析题。

显然,答案就是第一个\(i>sum[i]\)的位置,其中\(sum[i]\)表示所有权值\(\leq i\) 的元素之和。

我们考虑"暴力"。假设现在能连续组成\([1,now]\)之间的任意值,那么我们考虑有没有权值为\(now\)的元素:如果没有,答案就是\(now+1\);否则我们的值域至少扩大了\(a_{now+1}\)(这里\(a_{now+1}\)表示所有的权值为\(now+1\)的元素和)。然后我们就将新增的值域\([now+1,now+1+a_{now+1}]\)中的所有元素加上,就这样一直迭代下去。

因为每次迭代值域至少扩大一倍,所以最多迭代\(log_2(1e9)\)次。

代码:

#include<bits/stdc++.h>
#define ll long long
#define N 100005 using namespace std;
inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;} int n,m;
int rt[N];
int ls[N*50],rs[N*50];
int sum[N*50];
const int lx=1,rx=1e9; int tot;
void Insert(int &v,int old,int lx,int rx,int p) {
v=++tot;
ls[v]=ls[old];
rs[v]=rs[old];
sum[v]=sum[old]+p;
if(lx==rx) return ;
int mid=lx+rx>>1;
if(p<=mid) Insert(ls[v],ls[old],lx,mid,p);
else Insert(rs[v],rs[old],mid+1,rx,p);
} int query(int a,int b,int lx,int rx,int l,int r) {
if(lx>r||rx<l) return 0;
if(l<=lx&&rx<=r) return sum[b]-sum[a];
int mid=lx+rx>>1;
return query(ls[a],ls[b],lx,mid,l,r)+query(rs[a],rs[b],mid+1,rx,l,r);
} int main() {
n=Get();
for(int i=1;i<=n;i++) {
int a=Get();
Insert(rt[i],rt[i-1],lx,rx,a);
}
m=Get();
int l,r;
while(m--) {
l=Get(),r=Get();
int now=0,last=0,tem;
while(1) {
tem=query(rt[l-1],rt[r],lx,rx,last+1,now+1);
if(!tem) break;
last=now+1;
now+=tem;
}
cout<<now+1<<"\n";
}
return 0;
}

5255 -- 【FJOI2016】神秘数的更多相关文章

  1. 【BZOJ4408】[FJOI2016]神秘数(主席树)

    [BZOJ4408][FJOI2016]神秘数(主席树) 题面 BZOJ 洛谷 题解 考虑只有一次询问. 我们把所有数排个序,假设当前可以表示出的最大数是\(x\). 起始\(x=0\). 依次考虑接 ...

  2. 【LG4587】[FJOI2016]神秘数

    [LG4587][FJOI2016]神秘数 题面 洛谷 题解 首先我们想一想暴力怎么做 对于一段区间\([l,r]\) 我们先将它之间的数升序排序 从左往右扫, 设当前我们可以表示出的数为\([1,x ...

  3. (bzoj4408)[FJOI2016]神秘数(可持久化线段树)

    (bzoj4408)[FJOI2016]神秘数(可持久化线段树) bzoj luogu 对于一个区间的数,排序之后从左到右每一个数扫 如果扫到某个数a时已经证明了前面的数能表示[1,x],那么分情况: ...

  4. [bzoj4408][Fjoi2016]神秘数

    Description 一个可重复数字集合$S$的神秘数定义为最小的不能被$S$的子集的和表示的正整数. 例如$S={1,1,1,4,13}$, $1=1$, $2=1+1$, $3=1+1+1$, ...

  5. [FJOI2016]神秘数(脑洞+可持久化)

    题目描述 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13}, 1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = 4+1 6 = ...

  6. Luogu P4587 [FJOI2016]神秘数

    一道好冷门的好题啊,算是对于一个小结论和数据结构的一点考验吧 首先看完题目我们发现要从这个神秘数的性质入手,我们观察or手玩可得: 如果有\(x\)个\(1\),那么\([1,x]\)都是可以表示出来 ...

  7. BZOJ4299 & CC FRBSUM:ForbiddenSum & BZOJ4408 & 洛谷4587 & LOJ2174:[FJOI2016]神秘数——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4299 https://www.lydsy.com/JudgeOnline/problem.php? ...

  8. BZOJ 4408 FJOI2016 神秘数 可持久化线段树

    Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13},1 = 12 = 1+13 = 1+1+14 = 45 = 4+16 ...

  9. 洛谷 P4587 [FJOI2016]神秘数

    大鸽子 llmmkk 正在补8.3号咕掉的题 时隔两个月,再看到这道题,我又是一脸懵,这种思维的培养太重要了 链接: P4587 题意: 给出 \(n\) 个点的序列,\(m\) 次询问区间神秘数. ...

  10. Luogu4587 [FJOI2016]神秘数

    题目大意:给定一个长度为$n$的正整数序列$a_i$,$m$次询问,每次询问$[l,r]$,求最小的无法表示成$a_l,a_{l+1},\ldots,a_r$的子集之和的正整数. 数据范围:$1\le ...

随机推荐

  1. 集成腾讯位置服务到webapi

    经纬度转换为详细地址信息 参考文档:http://lbs.qq.com/webservice_v1/guide-gcoder.html 首先申请key,如果使用的是服务端请求webservice AP ...

  2. C# Winform打包部署时添加注册表信息实现开机自启动

    1.原理:需要开机自启动的程序,需要将其启动程序的路径写到注册表中指定的文件夹下 2. 写入注册表的方式有两种 a.在生成安装程序时配置 b.在程序运行时,动态配置 方法一:使用VS2010自带的打包 ...

  3. Mac包管理神器Homebrew

    概念 简称brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,相当于Red hat的yum.Ubuntu的apt-get. 安装命令 ruby -e "$( ...

  4. linux下ftp服务器搭建

    1.yum install vsftpd  使用yum安装ftp 2.创建并授权ftp文件目录   mkdir -P /ftp/ftpadmin       chmod -R 777 /ftp/ftp ...

  5. P1993 小 K 的农场

    题目描述 小 K 在 Minecraft 里面建立很多很多的农场,总共 n 个,以至于他自己都忘记了每个 农场中种植作物的具体数量了,他只记得一些含糊的信息(共 m 个),以下列三种形式描 述: 农场 ...

  6. cf1136D. Nastya Is Buying Lunch(贪心)

    题意 题目链接 给出一个排列,以及\(m\)个形如\((x, y)\)的限制,表示若\(x\)在\(y\)之前则可以交换\(x, y\). 问\(n\)位置上的数最多能前进几步 \(n \leqsla ...

  7. 基于timestamp和nonce的防重放攻击

    以前总是通过timestamp来防止重放攻击,但是这样并不能保证每次请求都是一次性的.今天看到了一篇文章介绍的通过nonce(Number used once)来保证一次有效,感觉两者结合一下,就能达 ...

  8. 在PeopleSoft中,什么是AlterAudit,Sysaudit和DDDAudit报告

    Alter Audit-是一个进程,它标识任何需要SQL Alter process的记录.即:如果AD中定义的record与数据库的中定义不匹配则标识该记录为应该修改. SQL Alter-AD中的 ...

  9. POI 读取 excel

    xls 和 xlsx 后缀是因为 world excel 版本不一致,需要区别对待 依赖 <dependency> <groupId>org.apache.poi</gr ...

  10. 兼容性问题:backgroud-size支持IE8浏览器的方法

    在工作中碰到一个问题:background-size是css3的新属性,当在IE8及其以下浏览器中不起作用,导致背景图片不能自适应元素的大小? 先看一个小demo: <!DOCTYPE html ...