bzoj4241 历史研究——分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4241
就是分块,预处理出从第 i 块到 j 位置的答案,以及从第 i 块到最后位置间每个数出现的次数;
然后块内统计、块外暴力即可。
代码如下:
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- #include<algorithm>
- using namespace std;
- typedef long long ll;
- int const maxn=1e5+;
- int n,q,a[maxn],b[maxn],cnt[][maxn],sta[maxn],top,m,tot,blk[maxn],num[maxn];
- ll f[][maxn];
- int main()
- {
- scanf("%d%d",&n,&q); tot=sqrt(n);
- for(int i=;i<=n;i++)blk[i]=(i-)/tot+;
- for(int i=;i<=n;i++)scanf("%d",&a[i]),b[i]=a[i];
- sort(b+,b+n+); m=unique(b+,b+n+)-b-;
- for(int i=;i<=n;i++)a[i]=lower_bound(b+,b+m+,a[i])-b;
- for(int i=;i<=blk[n];i++)
- {
- ll nw=;
- for(int j=lower_bound(blk+,blk+n+,i)-blk;j<=n;j++)
- cnt[i][a[j]]++,nw=max(nw,(ll)cnt[i][a[j]]*b[a[j]]),f[i][j]=nw;//cnt是第i块a[j]数量后缀
- //f[i][j]表示第i块到j位置的答案
- }
- for(int i=,x,y;i<=q;i++)
- {
- scanf("%d%d",&x,&y);
- ll ans=f[blk[x]+][y];
- int st=lower_bound(blk+,blk+n+,blk[y])-blk;
- for(int i=st;i<=y;i++)num[a[i]]++,sta[++top]=a[i];
- st=lower_bound(blk+,blk+n+,blk[x]+)-blk;
- for(int i=x;i<st;i++)
- {
- num[a[i]]++;
- ans=max(ans,(ll)(cnt[blk[x]+][a[i]]-cnt[blk[y]][a[i]]+num[a[i]])*b[a[i]]);
- sta[++top]=a[i];
- }
- printf("%lld\n",ans);
- while(top)num[sta[top]]=,top--;//不用memset
- }
- return ;
- }
bzoj4241 历史研究——分块的更多相关文章
- [bzoj4241][历史研究] (分块)
Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开始着手调查日记中记载的事件. ...
- [JOISC2014]歴史の研究/[BZOJ4241]历史研究
[JOISC2014]歴史の研究/[BZOJ4241]历史研究 题目大意: 一个长度为\(n(n\le10^5)\)的数列\(A(A_i\le10^9)\),定义一个元素对一个区间\([l,r]\)的 ...
- 【题解】BZOJ4241: 历史研究(魔改莫队)
[题解]BZOJ4241: 历史研究(魔改莫队) 真的是好题啊 题意 给你一个序列和很多组询问(可以离线),问你这个区间中\(\max\){元素出现个数\(\times\)元素权值} IOI国历史研究 ...
- 【BZOJ4241】历史研究 分块
[BZOJ4241]历史研究 Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开 ...
- BZOJ4241 历史研究
Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开始着手调查日记中记载的事件. ...
- BZOJ4241 历史研究 莫队 堆
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目 Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JO ...
- BZOJ4241历史研究——回滚莫队
题目描述 IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开始着手调查日记中记载的事件. 日记中记录了连 ...
- BZOJ4241:历史研究(回滚莫队)
Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开始着手调查日记中记载的事件. ...
- BZOJ4241 历史研究(莫队)
如果分块的话与区间众数没有本质区别.这里考虑莫队. 显然莫队时的删除可以用堆维护,但多了一个log不太跑得过. 有一种叫回滚莫队的trick,可以将问题变为只有加入操作.按莫队时分的块依次处理,一块中 ...
随机推荐
- 【译】x86程序员手册08 -2.6中断和异常
2.6 Interrupts and Exceptions 中断和异常 The 80386 has two mechanisms for interrupting program execution: ...
- dubbo之配置规则
配置规则 向注册中心写入动态配置覆盖规则 1.该功能通常由监控中心或治理中心的页面完成. RegistryFactory registryFactory = ExtensionLoader.getEx ...
- web移动端适配
/*** html节点字体大小随屏幕大小改变 用于rem布局***/首先这是一个立即执行函数(function (doc, win) { var docEl = doc.documentElement ...
- Sandbox 沙盒
In computer security, a sandbox is a security mechanism for separating running programs, usually in ...
- ARX中类型强制转换
比如 克隆 clone, 获得的是一个acrxobject, acrxobject *pobj=pployline->clone(); acdbpolyline *ppoly=acdbpolyl ...
- Scrapy爬虫框架 基础
1< scrapy的安装 命令行安装 pip install scrapy <常见错误是缺少 wim32api 安装win32api pip install pywin32 <还有就 ...
- UpLoadify在IE下兼容问题
一.在IE9.IE10不能点击的问题解决 解决方法:进入uploadify的js文件中,搜索SWFUpload.prototype.getFlashHTML,找到它对应的语句,将方法全部替换为以下内容 ...
- 原型链、构造函数、箭头函数、se6数组去重
原型链 例子如下: var arr = [1, 2, 3]; 其原型链为:arr ----> Array.prototype ----> Object.prototype ----> ...
- 关于 BaseHTTPServer 的介绍
简介: (1) 基础的web服务器是一个模板,其其角色是客户端和服务器端完成必要的HTTP交互,在basehttpserver模块中可以找到一个名字叫HTTPServer 的服务器基本类 (2)处理程 ...
- 关于新世界的大门(新博客地址:BBBob.cf)
更新:BBBob.cf 这个域名已经不用了(但是依旧可以访问),永久域名改为了BBBob.win 新博客地址为BBBob.cf,以后的博客都会在新博客更新,当然在新博客上我也会写得更用心些,不再像这里 ...