区间不同数个数
2015-07-10 22:59
281 查看
开坑...最近要把朱熹树写一下,就开个大坑来记录我的脑洞吧> <
subtask2: N,M 5k seq[i] 1G
subtask3: N,M 100k seq[i] 1G
subtask4: N,M 500k seq[i] 1G
空间2048MiB
开个map来判重也可以吧...
还是荐hashmap.
将左端点按\(\sqrt{n}\)大小分块按块排序,块内按右端点排个序. 再处理就好了.
块间也不会超过\(2\sqrt{n}\).
莫队算法可以处理非常多(离线)的题目.
区间不同数个数(静态)
给定一个序列,给出一些对于某个区间[l,r]的询问,求这个区间内不同数的个数.输入
int seq[]; range<int,int> query; #define input classof int N,M; fon(i,N) seq[i]; ' ' fon(i,M) query[i]; '\n' #define endinput endclassof
输出
int seq[]; #define output classof fon(i,M) answerof(query[i]); '\n' #define endoutput endclassof
数据范围
subtask1: N,M,seq[i] 1ksubtask2: N,M 5k seq[i] 1G
subtask3: N,M 100k seq[i] 1G
subtask4: N,M 500k seq[i] 1G
限制
时限10s/1P空间2048MiB
Subtask 1
10s跑N,M,NUMLIM 1k的区间不同数个数统计怎么也跑过了...Subtask 2
其实这个时间长度跑\(O(n^2)\)算法没有任何问题.开个map来判重也可以吧...
还是荐hashmap.
Subtask 3
从这里开始需要一点脑子了.将左端点按\(\sqrt{n}\)大小分块按块排序,块内按右端点排个序. 再处理就好了.
时间复杂度分析
块内右端点单调,显然\(O(\sqrt{n})\)每次更新.块间也不会超过\(2\sqrt{n}\).
注
这种分块离线求值就是莫队算法(的改进版).莫队算法可以处理非常多(离线)的题目.
相关文章推荐
- iOS中的copy ,kvc,kvo
- Java操作Oracle数据库
- 为什么对基础设施的监控变得如此重要?
- 设计模式---组合模式
- IOS开发常见面试题
- mbed TLS
- web缓存详解
- 记 Ubuntu14.04 Monodevelop 安装的两个问题
- SpringMVC学习笔记——Spring MVC与Struts2的区别2
- jQuery源码之ready()事件
- ionic cordova plugin for ios
- 实现mysql按月统计的教程
- SWING之JFrame
- javascript 事件处理
- 20150710
- nodejs mongodb好友关系数据库设计与操作
- github创建个人博客及自定义域名
- [转载]频谱分析仪基础知识:外差式频谱分析仪的工作原理
- SpringMVC学习笔记——Spring MVC与Struts2的区别1
- listctr图片作为图标