(WC2016模拟十八)【BZOJ4299】[CodeChef]FRBSUM
咕了若干天我终于来补坑了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的更多相关文章
- (WC2016模拟十八)Gangsters of Treeland
HINT: $1\leq N,Q\leq 10^5$ 原题:CodeChef November Challenge 2013 - MONOPLOY 题解: 其实这题是[SDOI2017]树点涂色的弱化 ...
- BZOJ4299 Codechef FRBSUM(主席树)
感觉非常不可做,于是考虑有什么奇怪的性质. 先考虑怎么求子集和mex.将数从小到大排序,假设已经凑出了0~n的所有数,如果下一个数>n+1显然mex就是n+1了,否则若其为x则可以凑出1~n+x ...
- BZOJ4299 : Codechef FRBSUM
若$[0,i]$的数都可以得到,那么$[1,所有不大于i+1的数的和]$的数都可以得到. 如此暴力枚举答案,用可持久化线段树支持查询,因为每次数字至少翻一倍,所以复杂度为$O(m\log^2n)$. ...
- BZOJ4299: Codechef FRBSUM(主席树)
题意 题目链接 数集S的ForbiddenSum定义为无法用S的某个子集(可以为空)的和表示的最小的非负整数. 例如,S={1,1,3,7},则它的子集和中包含0(S’=∅),1(S’={1}),2( ...
- bzoj4408 [Fjoi 2016]神秘数 & bzoj4299 Codechef FRBSUM 主席树+二分+贪心
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4299 https://lydsy.com/JudgeOnline/problem.php?id ...
- Web 前端开发人员和设计师必读文章推荐【系列二十八】
<Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- NeHe OpenGL教程 第四十八课:轨迹球
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- WCF技术剖析之十八:消息契约(Message Contract)和基于消息契约的序列化
原文:WCF技术剖析之十八:消息契约(Message Contract)和基于消息契约的序列化 [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制 ...
- Java进阶(三十八)快速排序
Java进阶(三十八)快速排序 前言 有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对"6 1 2 7 ...
随机推荐
- vue 移动端项目,动态控制div距离底部的距离
<template> <div class="details"> <com-nav-bar title="保险详情"> &l ...
- Facebook再次爆出安全漏洞,9000万用户受影响
今年上半年开始,美国社交媒体Facebook因数据泄露事件和涉嫌操纵选举等问题频繁接受听证会拷问,然而事情却远没有结束.今年9月Facebook再次爆出安全漏洞,导致9000万用户可能受到影响. 根据 ...
- How Many Partitions Does An RDD Have
From https://databricks.gitbooks.io/databricks-spark-knowledge-base/content/performance_optimization ...
- IDEA Maven 打包运行 jar java.io.FileNotFoundException: 问题?
当 使用 idea maven 将项目打包运行的时候,能够成功运行,但是总会跑到 xxx\xxx\lib 下 找jar包 如下异常: java.io.FileNotFoundException: D: ...
- 基于LXC的虚拟网络自动部署
一.问题: 在搭建以LXC为基础的虚拟网络时,网络参数繁多,配置过程繁琐.面临一个新的网络拓扑结构时,通常要花费大量时间来构建网络.因此,如果能通过配置文件,自动生成相对应的网络拓扑,并生成操作指令. ...
- ASP.NET-GUID扩展类使用
在NUGET上有一个GUID的类,安装试用一下它的方法 将string转为guid对象 Guid ad = new Guid("{99009327-15D2-4A69-B015-BEAC11 ...
- [AngularJS]Chapter 4 AngularJS程序案例分析
前边讲的都是基础.本章看看他们怎么合作的. 我们要建一个程序.一次一步.章末结束 [这个程序] GutHub是一个简单的菜谱管理程序.功能是存好吃的的菜谱并提供步骤.这个程序包含: 两列布局 左边是导 ...
- java 日期和字符串互转,依据当天整天时间 得到当天最后一秒的日期时间
java 日期和字符串互转.依据当天整天时间 得到当天最后一秒的日期时间 package com.hi; import java.text.DateFormat; import java.text ...
- Accessibility辅助控制类
熟悉Android开发的都知道辅助功能服务 Accessibility service.他的作用有非常多.360豌豆荚等应用市场的非root自己主动安装.微信抢红包插件.盲人辅助程序等等功能都是靠它实 ...
- 高速排序算法C++实现
//quick sort //STL中也有现成的高速排序算法.内部实现採用了下面技巧 //1)枢轴的选择採取三数取中的方式 //2)后半段採取循环的方式实现 //3)高速排序与插入排序结合 #incl ...