咕了若干天我终于来补坑了qwq

HINT

$1\leq N,M\leq 10^5$

$1\leq \sum A_i\leq 10^9$

题解:

虽然场上做出来了但还是觉得好神啊!

假设当前集合能凑出$[1,max]$这些数,此时再加入一个数$x$:

1.若$x<=max+1$,则必定能继续凑出$[max+1,max+x]$这些数,新的$max=max+x$;

2.若$x>max+1$,则$max+1$这个数必定凑不出来,也就会成为当前的forbiddennum。

那么开一颗主席树,每次查询求出区间$[L,R]$中值在$[1,max+1]$中的数的和来更新$max$,直到$max+1$凑不出来为止;

这样子做每次$max$至少翻倍,因此每次查询至多更新$logn$次,总的时间复杂度就是$O(nlog^2n)$

ps:本题跟[LOJ2174]【FJOI2016】神秘数 为同一题意

代码:

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define inf 1000000000
#define eps 1e-9
using namespace std;
typedef long long ll;
struct node{
int v,ls,rs;
}t[];
int n,m,l,r,tot=,ans,tmp,num[],rts[];
void build(int &u,int k,int l,int r,int v){
u=++tot;
t[u].v=t[k].v+v;
t[u].ls=t[k].ls;
t[u].rs=t[k].rs;
if(l==r)return;
int mid=(l+r)/;
if(v<=mid)build(t[u].ls,t[k].ls,l,mid,v);
else build(t[u].rs,t[k].rs,mid+,r,v);
}
int query(int u,int k,int l,int r,int v){
if(l==r){
return t[k].v-t[u].v;
}
int mid=(l+r)/;
if(v<=mid)return query(t[u].ls,t[k].ls,l,mid,v);
else return query(t[u].rs,t[k].rs,mid+,r,v)+(t[t[k].ls].v-t[t[u].ls].v);
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&num[i]);
build(rts[i],rts[i-],,inf,num[i]);
}
scanf("%d",&m);
for(int i=;i<=m;i++){
scanf("%d%d",&l,&r);
tmp=query(rts[l-],rts[r],,inf,);
ans=;
while(ans<=tmp){
ans=tmp+;
tmp=query(rts[l-],rts[r],,inf,ans);
}
printf("%d\n",ans);
}
return ;
}

(WC2016模拟十八)【BZOJ4299】[CodeChef]FRBSUM的更多相关文章

  1. (WC2016模拟十八)Gangsters of Treeland

    HINT: $1\leq N,Q\leq 10^5$ 原题:CodeChef November Challenge 2013 - MONOPLOY 题解: 其实这题是[SDOI2017]树点涂色的弱化 ...

  2. BZOJ4299 Codechef FRBSUM(主席树)

    感觉非常不可做,于是考虑有什么奇怪的性质. 先考虑怎么求子集和mex.将数从小到大排序,假设已经凑出了0~n的所有数,如果下一个数>n+1显然mex就是n+1了,否则若其为x则可以凑出1~n+x ...

  3. BZOJ4299 : Codechef FRBSUM

    若$[0,i]$的数都可以得到,那么$[1,所有不大于i+1的数的和]$的数都可以得到. 如此暴力枚举答案,用可持久化线段树支持查询,因为每次数字至少翻一倍,所以复杂度为$O(m\log^2n)$. ...

  4. BZOJ4299: Codechef FRBSUM(主席树)

    题意 题目链接 数集S的ForbiddenSum定义为无法用S的某个子集(可以为空)的和表示的最小的非负整数. 例如,S={1,1,3,7},则它的子集和中包含0(S’=∅),1(S’={1}),2( ...

  5. bzoj4408 [Fjoi 2016]神秘数 & bzoj4299 Codechef FRBSUM 主席树+二分+贪心

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4299 https://lydsy.com/JudgeOnline/problem.php?id ...

  6. Web 前端开发人员和设计师必读文章推荐【系列二十八】

    <Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  7. NeHe OpenGL教程 第四十八课:轨迹球

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. WCF技术剖析之十八:消息契约(Message Contract)和基于消息契约的序列化

    原文:WCF技术剖析之十八:消息契约(Message Contract)和基于消息契约的序列化 [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制 ...

  9. Java进阶(三十八)快速排序

    Java进阶(三十八)快速排序 前言 有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对"6 1 2 7 ...

随机推荐

  1. eclipse 启动程序时错误弹窗:multiple problems have occurred

    .log内容如下: !ENTRY org.eclipse.ui 4 4 2017-04-14 09:31:05.341!MESSAGE An internal error has occurred.! ...

  2. 值得尝试的十款 GNOME Shell 扩展

    值得尝试的十款 GNOME Shell 扩展 作者: JACK WALLEN 译者: 核子可乐 | 2016-09-22 17:10   评论: 6 收藏: 1 当 GNOME Shell(即 GNO ...

  3. Java使用反射通过对象属性获取属性的值

    代码: // 通过属性获取传入对象的指定属性的值 public String getValueByPropName(Student student, String propName) { String ...

  4. C# 鼠标左右手切换

    using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServi ...

  5. [BZOJ1322]Destroying The Graph

    题目大意:有一张有向图,对于每个点,有两种操作:1. 删掉它的所有入边2. 删掉它的所有出边对每个点的每个操作均有不同的价值.求使得图上没有边的最小价值.解题思路:考虑把点拆成入点和出点,然后就是二分 ...

  6. Virtual Box 新建一个虚拟机安装系统(补充:WIN7 64 bit 系统虚拟机无法安装 64 bit 系统问题)

    1.安装Virtual Box好后,点击新建 2.配置内存大小,这个根据自己需要配置就好 3.创建虚拟硬盘 这里选择固定分配.动态分配都可以,接下来就分配硬盘大小了 4.新建好后我们点击刚才建立的虚拟 ...

  7. codevs 1803 志愿者招募

    1803 志愿者招募 2008年NOI全国竞赛  时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master   题目描述 Description 申奥成功后,布布经过不懈努 ...

  8. 基于nginx的静态网页部署

    背景: 一序列的html网页需要部署 基于nginx的部署: 本文采用的基于openresty的nginx 配置. 简单地配置 Nginx 的配置文件,以便在启动 Nginx 时去启用这些配置即可实现 ...

  9. vim 跳转指定行

    在编辑模式下输入 ngg 或者 nG n为指定的行数(如25) 25gg或者25G 跳转到第25行. 在命令模式下输入行号n : n 如果想打开文件即跳转 vim +n FileName 查看当然光标 ...

  10. 图片3d轮放查看效果

    本功能比較简单,就是一个大幕.左右滚动播放图片. 关键点在于怎样实现平滑的滚动,包含动画效果,3d效果等. <style> img { position: absolute; top:20 ...