[TC14088]LimitedMemorySeries1
[TC14088]LimitedMemorySeries1
题目大意:
给定长度为\(n(n\le5\times10^6)\)的数组\(X\),询问不超过\(q(q\le100)\)次,每次询问第\(k_i\)大的数是多少。
数组\(X\)生成方式如下:
X[0] = x0
for i = 1 to n-1:
X[i] = (X[i-1] * a + b) % (10^9+7)
内存大小1MB,时间1S。
思路:
内存这么紧肯定不能开一个长度为\(n\)的数组,因此按照值域分块。先对每一个块开桶,统计每一块有多少数,确定答案在哪一块中。然后对于块中的每一个数统计个数。
时间复杂度\(\mathcal O(nq)\)。
源代码:
#include<vector>
#include<cstring>
class LimitedMemorySeries1 {
private:
using int64=long long;
static constexpr int B=31623,mod=1e9+7;
int cnt[B];
public:
int64 getSum(const int &n,const int &x0,const int &a,const int &b,std::vector<int> query) {
int64 ans=0;
for(auto k:query) {
memset(cnt,0,sizeof cnt);
for(register int i=0,x=x0;i<n;i++) {
cnt[x/B]++;
x=((int64)x*a%mod+b)%mod;
}
int p=0,q=0;
for(;p<B;p++) {
if(k-cnt[p]<=-1) break;
k-=cnt[p];
}
memset(cnt,0,sizeof cnt);
for(register int i=0,x=x0;i<n;i++) {
if(x/B==p) cnt[x%B]++;
x=((int64)x*a%mod+b)%mod;
}
for(;q<B;q++) {
if(k-cnt[q]<=-1) break;
k-=cnt[q];
}
ans+=(int64)p*B+q;
}
return ans;
}
};
[TC14088]LimitedMemorySeries1的更多相关文章
- TopCoder SRM 675 Div1 Problem 500 LimitedMemorySeries1(分块)
题意 给定一个长度不超过$5*10^{6}$的数列和不超过$100$个询问,每次询问这个数列第$k$小的数,返回所有询问的和 内存限制很小,小到不能存下这个数列.(数列以种子的形式给出) 时限$10 ...
- NodeJs和ReactJs单元测试工具——Jest
Jest——Painless JavaScript UnitTesting 特点 适应性强 默认使用Jasmine断言 模块化的 可扩展的 可配置的 沙箱式且快速 虚拟化JS环境,模拟浏览器 并行运行 ...
随机推荐
- WEB前端技巧之JQuery为动态添加的元素绑定事件.md
jquery 为动态添加的元素绑定事件 如果直接写click函数的话,只能把事件绑定在已经存在的元素上,不能绑定在动态添加的元素上 可以用delegate来实现 .delegate( select ...
- Spark记录-Scala语句(运算符-if-for-while-try-模式匹配)
Scala条件运算符 Scala条件运算符在下表中列出. 运算符 操作 描述 && 与 运算符左侧和右侧的值为true.仅当左侧为真时,右侧才被计算. || 或 左侧或右侧的至少一个值 ...
- HDU 4315 阶梯博弈变形
n个棋子,其中第k个是红色的,每个棋子只能往上爬,而且不能越过.重叠其他棋子,谁将红色棋子移到顶部谁赢. 由于只能往上爬,所以很像阶梯博弈.这题有2个限制,棋子不能重叠,有红棋存在 首先不考虑红色棋, ...
- 何凯文每日一句||DAY10
- MongoDB-3.4搭建副本集
搭建副本集 1:首先创建3台虚拟机作为配置环境 IP1:192.168.101.175 IP2:192.168.101.176 IP3:192.168.101.177 2.下载MongoDB 3.4版 ...
- ASP.NET MVC学习笔记-----Filter(1)
Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter AuthorizeAttribute 最先执行,在其他类型的fi ...
- 浅谈 JSON 那些被转义的字符们
其实,之前我一直以为 JSON 会把 ASCII 可显示字符以外的统统转义为 Unicode,直到有一次我用 JSON.stringify 才发现,其实是 PHP 为我们想的太周到了. 我以前是一位 ...
- ajax函数说明
url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 ...
- PB程序调用C++ COM生成对象发回-2问题
C++写的COM组件用于读CPU卡,在C#中正常能够引用使用,但是在PB中却是返回-2,不识别类名,代码如下: OleObject ole_AddComole_AddCom = Create OLEO ...
- Redis持久化——AOF
一.是什么? AOF是以日志的形式来记录每个写操作,将Redis执行过的所有写操作记录下来(读操作不做记录),只许追加文件不可以改写文件,Redis启动之初会读取该文件重新构建数据,换言之,Redis ...