题链:

主席树
首先,对于一些数来说,
如果可以我们可以使得其中的某些数能够拼出 1~ret
那么此时的ANS(神秘数)= ret+1
然后考虑,如果此时存在另一个数小于等于 ANS,(设该数为 x)
则一定可以在原来的1~ret的基础上拼出 1~ret+x
即 ANS 可以更新为 ret+x+1
所以具体的操作就是:
每次查询区间内小于ANS的数的和(SUM),然后如果SUM大于ANS,则更新ANS为SUM+1。
不断上述操作直到SUM<ANS为止。
主席数实现在序列区间中查询权值区间的和。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 100500
using namespace std;
int A[MAXN],tmp[MAXN];
int N,M,tnt;
struct CMT{
long long sum[MAXN*20];
int rt[MAXN],ls[MAXN*20],rs[MAXN*20],sz;
void Insert(int v,int &u,int l,int r,int p){
u=++sz; ls[u]=ls[v]; rs[u]=rs[v];
sum[u]=sum[v]; sum[u]+=tmp[p];
if(l==r) return;
int mid=(l+r)>>1;
if(p<=mid) Insert(ls[v],ls[u],l,mid,p);
else Insert(rs[v],rs[u],mid+1,r,p);
}
long long Query(int v,int u,int l,int r,int al,int ar){
if(al<=l&&r<=ar) return sum[u]-sum[v];
int mid=(l+r)>>1; long long ret=0;
if(al<=mid) ret+=Query(ls[v],ls[u],l,mid,al,ar);
if(mid<ar) ret+=Query(rs[v],rs[u],mid+1,r,al,ar);
return ret;
}
void Build(){
for(int i=1;i<=N;i++)
Insert(rt[i-1],rt[i],1,tnt,A[i]);
}
}DT;
int main(){
// freopen("/home/noilinux/Documents/Code/BZOJ/4408.in","r",stdin);
// printf("BEGIN.\n");
scanf("%d",&N);
for(int i=1;i<=N;i++)
scanf("%d",&A[i]),tmp[i]=A[i];
sort(tmp+1,tmp+N+1);
tnt=unique(tmp+1,tmp+N+1)-tmp-1;
for(int i=1;i<=N;i++)
A[i]=lower_bound(tmp+1,tmp+tnt+1,A[i])-tmp;
scanf("%d",&M);
DT.Build(); long long ANS,ret,p;
for(int i=1,l,r;ANS=0,ret=0,i<=M;i++){
scanf("%d%d",&l,&r);
while(ANS<ret+1){
ANS=ret+1;
p=upper_bound(tmp+1,tmp+tnt+1,ANS)-tmp-1;
ret=DT.Query(DT.rt[l-1],DT.rt[r],1,tnt,1,p);
}
printf("%lld\n",ANS);
}
return 0;
}

  

 

●BZOJ 4408 [Fjoi 2016]神秘数的更多相关文章

  1. Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题

    4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 177  Solved: 128[Submit][Status ...

  2. BZOJ 4408: [Fjoi 2016]神秘数

    4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 464  Solved: 281[Submit][Status ...

  3. BZOJ 4408: [Fjoi 2016]神秘数 可持久化线段树

    4408: [Fjoi 2016]神秘数 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4408 Description 一个可重复数字集 ...

  4. BZOJ 4408: [Fjoi 2016]神秘数 [主席树]

    传送门 题意: 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13},8无法表示为集合S的子集的和,故集合S的神秘数为8.现给定n个正整数a[1]. ...

  5. bzoj 4408: [Fjoi 2016]神秘数 数学 可持久化线段树 主席树

    https://www.lydsy.com/JudgeOnline/problem.php?id=4299 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1 ...

  6. BZOJ 4408: [Fjoi 2016]神秘数 主席树 + 神题

    Code: #include<bits/stdc++.h> #define lson ls[x] #define mid ((l+r)>>1) #define rson rs[ ...

  7. 4408: [Fjoi 2016]神秘数

    4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 452  Solved: 273 [Submit][Stat ...

  8. [BZOJ4408][Fjoi 2016]神秘数

    [BZOJ4408][Fjoi 2016]神秘数 试题描述 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13},1 = 12 = 1+13 = 1 ...

  9. 【BZOJ4408】[Fjoi 2016]神秘数 主席树神题

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

随机推荐

  1. python 操作Memcached

    启动Memcached memcached -d -m 10 -u root -l 10.211.55.4 -p 12000 -c 256 -P /tmp/memcached.pid 参数说明: -d ...

  2. nyoj 韩信点兵

    描述相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排.五人一排.七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了.输入3个非负整数a,b,c ,表示每种队形排尾的人数 ...

  3. nyoj 黑色帽子

    黑色帽子 时间限制:1000 ms  |  内存限制:65535 KB 难度:1   描述         最近发现了一个搞笑的游戏,不过目前还没玩过.一个舞会上,每个人头上都戴着一顶帽子,帽子只有黑 ...

  4. WebApi 方法的参数类型总结。

    1:[HttpGet]  ①:get方法之无参数. [HttpGet] public IHttpActionResult GetStudentInfor() { List<StudentMode ...

  5. phalcon环境的搭建和dll扩展下载与选择

    phalcon需要下载一个扩展的dll文件才能运行项目 其中需要注意dll放在一个php扩展目录中windows下php/ext/,还需要在两个Php.ini文件中增加扩展说明,一般只需要更改 D:\ ...

  6. 增加Linux虚拟机的硬盘空间

    原配置为40G,现需要增加到60G,操作方法如下: 一.虚拟机关机,在编辑设置里调整硬盘空间到60G 二.虚拟机开机,扩展硬盘空间 1.安装gparted,命令如下 sudo apt-get inst ...

  7. springboot多模块项目下,子模块调用报错:程序包xxxxx不存在

    今天在用springboot搭建多模块项目,结构中有一个父工程Parent  一个通用核心工程core 以及一个项目工程A 当我在工程A中引入core时,没有问题,maven install正常 当我 ...

  8. apigw鉴权分析(1-3)百度 AI - 鉴权方式分析

    http://ai.baidu.com/docs#/Begin/top 一.访问入口 二.鉴权方式分析 1.鉴权认证方式一 - access_token - 针对HTTP API调用者 2.鉴权认证方 ...

  9. Pyhon之Django中的Form组件

    Pyhon之Django中的Form组件   新手上路 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面 ...

  10. django的models模块查询方法

    假定models中有一个类BookInfo 模块查询不同于sql语句,模块查询的结果会返回符合条件的整个一行的对象,或者多个对象组成的查询集. 查询集类似列表,有相似的方法. 1 model查询语句: ...