如果分块的话与区间众数没有本质区别。这里考虑莫队。

  显然莫队时的删除可以用堆维护,但多了一个log不太跑得过。

  有一种叫回滚莫队的trick,可以将问题变为只有加入操作。按莫队时分的块依次处理,一块中左端点的差不超过√n,右端点单调递增。首先将右端点也在该块中的询问暴力处理。然后令指针l在下一块开头,指针r在这一块结尾。暴力扩展右端点移动指针r,到达询问点时,移动指针l以回答询问,但不让指针l的移动对之后的询问产生影响,即回滚。这样就可以处理删除了。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 100010
#define ll long long
int n,m,a[N],b[N],cnt[N];
ll ans[N];
struct data
{
int x,y,k,i;
bool operator <(const data&a) const
{
return k<a.k||k==a.k&&y<a.y;
}
}q[N];
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4241.in","r",stdin);
freopen("bzoj4241.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read(),m=read();
for (int i=;i<=n;i++) b[i]=a[i]=read();
sort(b+,b+n+);
int t=unique(b+,b+n+)-b-;
for (int i=;i<=n;i++) a[i]=lower_bound(b+,b+t+,a[i])-b;
int block=sqrt(n);
for (int i=;i<=m;i++) q[i].x=read(),q[i].y=read(),q[i].k=q[i].x/block,q[i].i=i;
sort(q+,q+m+);
for (int i=;i<=m;i++)
{
int t=i;while (t<m&&q[t+].k==q[i].k) t++;
while (i<=t&&q[i].y<(q[i].k+)*block)
{
for (int j=q[i].x;j<=q[i].y;j++)
{
cnt[a[j]]++;
ans[q[i].i]=max(ans[q[i].i],1ll*cnt[a[j]]*b[a[j]]);
}
for (int j=q[i].x;j<=q[i].y;j++) cnt[a[j]]--;
i++;
}
int r=(q[i].k+)*block-;ll v=;
for (int j=i;j<=t;j++)
{
while (r<q[j].y)
{
cnt[a[++r]]++;
v=max(v,1ll*cnt[a[r]]*b[a[r]]);
}
ans[q[j].i]=v;
for (int k=(q[i].k+)*block-;k>=q[j].x;k--)
{
cnt[a[k]]++;
ans[q[j].i]=max(ans[q[j].i],1ll*cnt[a[k]]*b[a[k]]);
}
for (int k=(q[i].k+)*block-;k>=q[j].x;k--) cnt[a[k]]--;
}
memset(cnt,,sizeof(cnt));
i=t;
}
for (int i=;i<=m;i++) printf(LL,ans[i]);
return ;
}

BZOJ4241 历史研究(莫队)的更多相关文章

  1. BZOJ4241 历史研究 莫队 堆

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目 Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JO ...

  2. BZOJ 4241: 历史研究——莫队 二叉堆

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4241 题意:N个int范围内的数,M次询问一个区间最大的(数字*出现次数)(加权众数),可以 ...

  3. 【题解】BZOJ4241: 历史研究(魔改莫队)

    [题解]BZOJ4241: 历史研究(魔改莫队) 真的是好题啊 题意 给你一个序列和很多组询问(可以离线),问你这个区间中\(\max\){元素出现个数\(\times\)元素权值} IOI国历史研究 ...

  4. [JOISC2014]歴史の研究/[BZOJ4241]历史研究

    [JOISC2014]歴史の研究/[BZOJ4241]历史研究 题目大意: 一个长度为\(n(n\le10^5)\)的数列\(A(A_i\le10^9)\),定义一个元素对一个区间\([l,r]\)的 ...

  5. BZOJ4241历史研究——回滚莫队

    题目描述 IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开始着手调查日记中记载的事件. 日记中记录了连 ...

  6. BZOJ4241:历史研究(回滚莫队)

    Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开始着手调查日记中记载的事件. ...

  7. 2018.08.14 bzoj4241: 历史研究(回滚莫队)

    传送们 简单的回滚莫队,调了半天发现排序的时候把m达成了n... 代码: #include<bits/stdc++.h> #define N 100005 #define ll long ...

  8. bzoj4241: 历史研究(回滚莫队)

    传送门 这是一个叫做回滚莫队的神奇玩意儿 是询问,而且不强制在线,就决定是你了莫队 如果是每次插入一个数是不是很简单? 然而悲剧的是我们莫队的时候不仅要插入数字还要删除数字 那么把它变成只插入不就行了 ...

  9. BZOJ4241 历史研究 【回滚莫队】

    题目描述:给出一个长度为\(n\)的数组,每次询问区间 \([l,r]\),求 \(\max\limits_{x}x*cnt_x\),其中 \(cnt_x\) 表示 \(x\) 在区间 \([l,r] ...

随机推荐

  1. 成都优步uber司机第五组奖励政策

    7月14日,成都优步uber团队发布了第五组用户分组.在传言要推出第四组的时候,心想事不过三吧,意外,现在第五组都出来了.一起看看成都优步司机第五组的详细内容!滴滴快车单单2.5倍,注册地址:http ...

  2. 【原创】MyEclipse反编译添加jadclipse_3.3.0 曲折的完美解决

    本人QQ:9715234 (java屌丝一枚) 共三部分 一.下载两个文件exe和jar 1.http://nchc.dl.sourceforge.net/project/jadclipse/jadc ...

  3. Hive支持行级update、delete时遇到的问题

    Hive从0.14版本开始支持事务和行级更新,但缺省是不支持的,需要一些附加的配置.要想支持行级insert.update.delete,需要配置Hive支持事务.(行级的insert好像不配置也能运 ...

  4. 电子质检报告系统v3.8

    南京转折点信息是太阳升软件全资子公司,一家专业从事医药软件开发的医药软件企业. 根据新版GSP支持医药企业药品质检报告电子化的要求及国家药监局的解释:供货商提供的加盖企业电子印章的电子药品检验报告与纸 ...

  5. 低于0.01%的极致Crash率是怎么做到的?

    WeTest 导读 看似系统Bug的Crash 99%都不是系统问题!本文将与你一起探索Crash分析的科学方法. 在移动互联网闯荡多年的iOS手机管家,经过不断迭代创新,已经涵盖了隐私(加密相册). ...

  6. 「日常训练」Balancing Act(POJ-1655)

    题意与分析 树的重心板子题. 值得考虑的是,重心究竟有哪些优秀的性质? 这里是一些网上能看到的性质: (判定性质)找到一个点,其所有的子树中最大的子树节点数最少(子树可以"倒着看" ...

  7. C 基本运算

    一 算术运算 C语言一共有34种运算符 包括了常见的加减乘除运算 1. 加法运算+ 除开能做加法运算 还能表示正号: +5, +90 2. 减法运算- 除开能做减法运算 还能表示符号: -10, -2 ...

  8. Spring Boot下的lombok安装 (日志) 不能识别log变量问题

    参考地址:http://blog.csdn.net/blueheart20/article/details/52909775 ps:除了要加载依赖之外 还要安装lombok插件

  9. OpenPAI大规模人工智能平台安装部署文档

    环境要求: 如果需要图形界面,需要在Ubuntu系统安装,否则centos系统安装时是没有问题的(web端和命令行进行任务提交) 安装过程需要有另外一台控制端机器(注意:区别于集群所在的任何一台服务器 ...

  10. SIFT特征原理与理解

    SIFT特征原理与理解 SIFT(Scale-invariant feature transform)尺度不变特征变换 SIFT是一种用来侦测和描述影像中局部性特征的算法,它在空间尺度中寻找极值点,并 ...