遇到一道题,我们该做什么?

打暴力。

此题的暴力是什么?从小到大枚举答案。但这太慢了,需要一个结论来加速一下:

若 \([1,x]\) 都能够被表示出来,新加入一个数 \(y\),若 \(y>x+1\),那么新的答案仍然是 \([1,x]\);若 \(y<=x+1\),则新的答案为 \([1,x+y]\)。

不是很严谨,感性理解一下

有了这个结论,能够加速枚举答案。

对于一个可行的 \(ans\),我们统计区间中不大于 \(ans\) 的数之和 \(sum\)。若 \(sum=ans\),答案就是 \(ans\),否则将 \(ans\) 替换为 \(sum\) 继续枚举。

至于统计数的个数可以使用主席树。

这复杂度咋一看是 \((\sum a)\log (\sum a)\) 的,其实不然。

假设上一次枚举的数为 \(lst\),这一次枚举的数为 \(ans\),很容易发现这一次的 \(sum\) 包含了大于 \(lst\) 且不大于 \(ans\) 的数 废话。但第二部分的和一定大于 \(lst\),也就是说 \(sum > 2lst\),只需要 \(\log (\sum a)\) 次枚举即可。

复杂度就是 \(m\log n\log (\sum a)\) 的啦

喜闻乐见的 代码:

#include<cstdio>
const int M=1e5+5,N=1e9;
int n,m,tot,root[M];
struct Node{
int L,R,sum;
}t[M*35];
int Modify(int u,int x,int L=1,int R=N){
int id=++tot;
t[id]=t[u];t[id].sum+=x;
if(L<R){
int mid=L+R>>1;
if(x<=mid)t[id].L=Modify(t[u].L,x,L,mid);
else t[id].R=Modify(t[u].R,x,mid+1,R);
}
return id;
}
int Query(int q,int p,int x,int L=1,int R=N){
if(L==R)return t[p].sum-t[q].sum;
int mid=L+R>>1;
if(x<=mid)return Query(t[q].L,t[p].L,x,L,mid);
else return t[t[p].L].sum-t[t[q].L].sum+Query(t[q].R,t[p].R,x,mid+1,R);
}
signed main(){
register int i,L,R,x,ans;
scanf("%d",&n);
for(i=1;i<=n;++i)scanf("%d",&ans),root[i]=Modify(root[i-1],ans);
scanf("%d",&m);
for(i=1;i<=m;++i){
scanf("%d%d",&L,&R);ans=1;
while((x=Query(root[L-1],root[R],ans))>=ans)ans=x+1;
printf("%d\n",ans);
}
}

最新文章

  1. iOS开发系列--Swift 3.0
  2. C#----GDI+画图的一些注意和细节
  3. You know元音字母吗?
  4. 每天一个 Linux 命令(4):mkdir
  5. c读取文本文档
  6. 【解题报告】POJ-1106 Transmitters
  7. C#之父 Anders Hejlsberg
  8. 简述configure、pkg-config、pkg_config_path三者的关系
  9. U盘检测软件:ChipGenius,MyDiskTest
  10. 使用AndroidStudio快速开发教程
  11. [C#] 《Concurrency in C# Cookbook》读书笔记(一)- 并发编程概述
  12. 51nod--1134 最长递增子序列 (动态规划)
  13. MySql 主从同步 (库名不同)
  14. jspdf简单使用
  15. python dictionay(字典 )基本用法
  16. javascript实现一行文字随不同设备自适应改变字体大小至字数完全展示
  17. java中的排序(自定义数据排序)--使用Collections的sort方法
  18. 怎样使用 css 的@media print控制打印
  19. Jsonlib 属性过滤器
  20. js 中的console.log有什么作用

热门文章

  1. 连接docker里面的mysql失败解决
  2. DatabaseMetaData
  3. MySQL 索引、事务与存储引擎
  4. 【HDU6662】Acesrc and Travel(树型Dp)
  5. 第8章 File I/O,File类操作文件的属性
  6. C# 给Word每一页设置不同图片水印
  7. XStream: Stream Processing Platform at Facebook
  8. 转:Minikuberar的含义很不错可以看看
  9. 【C# .Net GC】开篇
  10. 【C# 线程 】内存模型 与Volatile