BZOJ 4241 历史研究
Description
Input
Output
Sample Input
9 8 7 8 9
1 2
3 4
4 4
1 4
2 4
Sample Output
8
8
16
16
HINT
这道题刚开始时没有思路......后来发现好像和区间众数的方法有点像......
好了,我们考虑如何做这道题。首先,我们可以把区间分块。然后,我们可以用$O(n \sqrt{n})$的复杂度求出$f_{i,j}$,表示取第$i$块到第$j$块中所有元素的答案。
然后,我们考虑如何得到区间$[l,r]$的答案。如果$l$和$r$在同一块,那么显然扫一遍这个块就可以了。否则,我们可以先把$[l,r]$覆盖的完整的块的答案统计一下,再统计一下边角余料中答案最大的数。显然答案一定在这三者中。
但是,统计边角余料的答案并不好做。于是,我们可以再来一个数组$cnt_{i,j}$,表示前$i$个块中第$j$号元素出现了多少次(注意先要离散化),然后我们就可以$O(1)$地统计完整的块中每种元素出现的个数了。取一下$\max$就可以了。
下面是代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 #define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout) 7 #define maxn 100010 8 #define kuai 501 9 10 using namespace std; 11 typedef long long llg; 12 13 int n,m,N,ln,L[kuai],R[kuai],cnt[kuai][maxn]; 14 int a[maxn],b[maxn],lb,c[maxn],ci[maxn],be[maxn]; 15 llg f[kuai][kuai],ans; 16 17 int getint(){ 18 int w=0;bool q=0; 19 char c=getchar(); 20 while((c>'9'||c<'0')&&c!='-') c=getchar(); 21 if(c=='-') q=1,c=getchar(); 22 while(c>='0'&&c<='9') w=w*10+c-'0',c=getchar(); 23 return q?-w:w; 24 } 25 26 int main(){ 27 n=getint();m=getint(); 28 for(int i=1;i<=n;i++) a[i]=b[i]=getint(); 29 sort(b+1,b+n+1); lb=unique(b+1,b+n+1)-b-1; 30 for(int i=1;i<=n;i++){ 31 int l=1,r=lb,mid; 32 while(l!=r){ 33 mid=l+r>>1; 34 if(a[i]<=b[mid]) r=mid; 35 else l=mid+1; 36 } 37 c[i]=l; 38 } 39 N=sqrt(n); ln=n/N; if(n%N) ln++; 40 for(int i=1;i<ln;i++) L[i]=R[i-1]+1,R[i]=N*i; 41 L[ln]=R[ln-1]+1; R[ln]=n; 42 for(int i=1,r;i<=ln;i++){ 43 ans=0; r=L[i]-1; 44 for(int j=L[i];j<=R[i];j++) cnt[i][c[j]]++,be[j]=i; 45 for(int j=1;j<=ln;j++){ 46 while(r<R[j]){ 47 r++; ci[c[r]]++; 48 ans=max(ans,(llg)(ci[c[r]])*(llg)a[r]); 49 } 50 f[i][j]=ans; 51 } 52 for(int j=1;j<=n;j++) cnt[i][j]+=cnt[i-1][j]; 53 for(int j=1;j<=lb;j++) ci[j]=0; 54 } 55 while(m--){ 56 int l=getint(),r=getint(); ans=0; 57 if(be[l]==be[r]){ 58 for(int i=l;i<=r;i++) 59 ans=max(ans,(llg)(++ci[c[i]])*(llg)a[i]); 60 for(int i=l;i<=r;i++) ci[c[i]]--; 61 } 62 else{ 63 ans=f[be[l]+1][be[r]-1]; 64 for(int i=l;i<=R[be[l]];i++) 65 ans=max(ans,(llg)((++ci[c[i]])+cnt[be[r]-1][c[i]]-cnt[be[l]][c[i]])*(llg)a[i]); 66 for(int i=L[be[r]];i<=r;i++) 67 ans=max(ans,(llg)((++ci[c[i]])+cnt[be[r]-1][c[i]]-cnt[be[l]][c[i]])*(llg)a[i]); 68 for(int i=l;i<=R[be[l]];i++) ci[c[i]]--; 69 for(int i=L[be[r]];i<=r;i++) ci[c[i]]--; 70 } 71 printf("%lld\n",ans); 72 } 73 return 0; 74 }
转载于:https://www.cnblogs.com/lcf-2000/p/5721562.html
BZOJ 4241 历史研究相关推荐
- BZOJ 4241: 历史研究
Description IOI国历史研究的第一人--JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开始着手调查日记中记载的事件. ...
- 【周末狂欢赛6】[AT1219]历史研究(回滚莫队),大魔法师(矩阵+线段树),单峰排列
文章目录 T1:单峰排列 题目 题解 code T2:历史研究 题目 题解 code T3:大魔法师 题目 题解 code 我可能这辈子都更不出来狂欢赛5了,先咕咕 T1:单峰排列 题目 一个n的全排 ...
- 亚洲的音乐史料及其历史研究状况
一.亚洲音乐的史料及其性质 东西方音乐的历史记载,在其形态的表述中有着很大的差异.这种差异是由于音乐本身的性质与叙述音乐史料的性质的不同而形成的,实际上也是构成音乐史特征的重要依据.乐谱.传记.手稿等 ...
- 历史研究(回滚莫队)
问题 C: 历史研究 时间限制: 1 Sec 内存限制: 128 MB 提交: 61 解决: 2 [提交] [状态] [命题人:admin] 题目描述 IOI 国历史研究的大牛--JOI 教授,最 ...
- 汤因比与《历史研究》
英国著名历史学家阿诺德·汤因比及其鸿篇巨制<历史研究>早已为专业研究人员和广大历史爱好者所熟悉和景仰,但十二本的<历史研究>卷帙浩繁,常令众多心仪者望而却步.汤因比在去世前,根 ...
- AI成功破译古老未知语言,人工智能技术开辟历史研究新时代
近年来,人工智能在各个领域取得了突飞猛进的发展,成为了当今社会讨论的热点.尽管有关其使用的争议不断,但AI技术在某些方面的作用已经不容忽视. 最近,以色列特拉维夫大学和阿里尔大学的研究者们联手研发了一 ...
- 远古历史研究的魅力与挑战
正如考古学家伊恩·霍德(Ian Hodder)曾经指出的那样,当我们只有极少的资料分布点时,通常不会只有一个模型适用于它们.资料愈是匮乏,我们愈是难以在不同的备选项间做出甄别.我们无法直接肯定或否定一 ...
- 王幼军:拉普拉斯概率理论的历史研究
拉普拉斯概率理论的历史研究 http://www.doc88.com/p-917707463935.html 绪论 一,研究的意义 从中国数学史研究的角度来说,拉普拉斯的概率理论的历史可以为我们 ...
- 国内研究者在关注着大家的哪些心理变化?横断历史研究介绍与趋势分析
Hello,大家好 这里是壹脑云科研圈,我是莹~ 在之前的一篇文献介绍<1993至2016年医学生心理健康变迁的横断历史研究>中,我们简要介绍了一下横断历史研究的方法. 文献|劝人学医,& ...
- BZOJ4241历史研究题解--回滚莫队
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4241 分析 这题就是求区间权值乘以权值出现次数的最大值,一看莫队法块可搞,但仔细想想,莫 ...
最新文章
- 在CISCO交换机上配置SSH
- 学习笔记Flink(四)—— Flink基础API及核心数据结构
- Spring的jar包下载及目录详解
- 面试官问我:如何设计 QQ、微信等第三方账号登陆 ?
- 随手能做194个实验,不呆板,轻松撬动大智慧
- NGINX下配置CACHE-CONTROL
- python coding utf-8_【转】怎么在Python里使用UTF-8编码
- 限定位宽比较大小_自己之前买电脑整理的一些电脑知识,比较粗糙,仅供参考。...
- Codeforces 510 E. Fox And Dinner
- 数字钟实验报告stm32_单片机-电子时钟实验报告
- php mysql 简单留言板_php+mysql 最简单的留言板_PHP教程
- 一文搞定移动端适配!
- 安装JDK和tomcat
- 谁提供一个能用的ICHAT文字聊天室程序,急需
- 网页连接mysql教程_网页怎么连接到数据库?
- 【WhatsApp营销】如何设置欢迎消息?WhatsAppBusiness问候语示例
- 那些值得借鉴的的国外创意404错误页面设计
- python成都_Python抓取成都房价信息
- 10.自媒体文章管理
- python的self使用
热门文章
- Python之父:为什么操作符很有用?
- Scala 基础(7)—— 函数字面量和一等函数
- 【Python】python网络协议
- 解决:/bin/bash: mvn: 未找到命令
- Linux中下载,压缩,解压等命令
- Windows7与Window2008 64位IIS7上面配置操作Excel
- XML参考 :XmlReader 详解、实例(3)-- 读取XML节点和属性名称
- linux每日命令(20):find命令概览
- 因项目需要做——ubuntu16.04 双网卡绑定
- MySQL开启命令自动补全功能(auto-rehash)