首页 技术 正文
技术 2022年11月17日
0 收藏 535 点赞 4,210 浏览 1643 个字

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

  显然莫队时的删除可以用堆维护,但多了一个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 ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,484
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,899
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,732
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,485
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,125
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,285