题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4241

套路:可以大力预处理,如果求区间加权众数,可以预处理i~j块(或 j 位置)的最大值,为了暴力再预处理i~j块每个数出现次数;这个i~j可以记录成从第i块开始的后缀,这样空间还是n*w。

如果不无脑开long long可以快18s。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
const int N=1e5+;
int n,q,base,bh[N],sta[N],top,a[N],c[N],cnt[][N],nm[N];
ll f[][N];
int main()
{
scanf("%d%d",&n,&q);base=sqrt(n);
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);c[i]=a[i];
bh[i]=(i-)/base+;
}
sort(c+,c+n+);int tot=unique(c+,c+n+)-c-;
for(int i=;i<=n;i++)a[i]=lower_bound(c+,c+tot+,a[i])-c;
for(int i=;i<=bh[n];i++)
{
ll tmp=;
for(int j=(i-)*base+;j<=n;j++)//i,not bh[i]
cnt[i][a[j]]++,tmp=max(tmp,(ll)cnt[i][a[j]]*c[a[j]]),f[i][j]=tmp;//这里把j表示成具体位置也行(好?)
//c[a[j]] //之所以用tmp,是为了把之前的值曾达到的最大值也算在自己里
}
int x,y;
while(q--)
{
scanf("%d%d",&x,&y);
ll ans=f[bh[x]+][y];
for(int i=(bh[y]-)*base+;i<=y;i++)
nm[a[i]]++,sta[++top]=a[i];
for(int i=x;i<=bh[x]*base&&i<=n;i++)
nm[a[i]]++,sta[++top]=a[i],ans=max(ans,(ll)(cnt[bh[x]+][a[i]]-cnt[bh[y]][a[i]]+nm[a[i]])*c[a[i]]);
printf("%lld\n",ans);
for(int i=;i<=top;i++)nm[sta[i]]=;top=;
}
return ;
}

bzoj 4241 历史研究——分块(区间加权众数)的更多相关文章

  1. BZOJ 4241 历史研究

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

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

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

  3. BZOJ.4241.历史研究(回滚莫队 分块)

    题目链接 \(Description\) 长度为n的数列,m次询问,每次询问一段区间最大的 \(A_i*tm_i\) (重要度*出现次数) \(Solution\) 好像可以用莫队做,但是取max的操 ...

  4. BZOJ 4241 历史研究(分块)

    题意 题解 #include<iostream> #include<cstring> #include<cstdio> #include<cmath> ...

  5. BZOJ 4241: 历史研究 ( 回 滚 )

    题目:  链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4241 题意:给你一个长度为n序列,m次查询,每次询问 一段区间 最大的  a[ i ...

  6. 【BZOJ4241】历史研究 分块

    [BZOJ4241]历史研究 Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开 ...

  7. [bzoj4241][历史研究] (分块)

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

  8. bzoj4241 历史研究——分块

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4241 就是分块,预处理出从第 i 块到 j 位置的答案,以及从第 i 块到最后位置间每个数出 ...

  9. LOJ2874 JOISC2014 历史研究 分块、莫队

    传送门 看到出现次数自然地考虑莫队. 但是发现如果需要删除并动态维护答案的话,则要用一个堆来维护答案,增加了一个\(log\).但是加入操作却没有这个\(log\),所以我们考虑避免删除操作. 分块, ...

随机推荐

  1. MapReduce模型简介

  2. 确认(confirm 消息对话框)语法:confirm(str); 消息对话框通常用于允许用户做选择的动作,如:“你对吗?”等。弹出对话框(包括一个确定按钮和一个取消按钮)

    确认(confirm 消息对话框) confirm 消息对话框通常用于允许用户做选择的动作,如:"你对吗?"等.弹出对话框(包括一个确定按钮和一个取消按钮). 语法: confir ...

  3. 【学术篇】洛谷1550——打井Watering Hole

    题目の传送门:https://www.luogu.org/problem/show?pid=1550 精简版题意(本来就精简了不是么):n个点,每个点可以选择打井或从别的有水的点引水,求所有点都有水用 ...

  4. 在双重for循环内部使用async异步请求axios中遇到的问题

    在methods中的方法 async getPro () { let _this = this let newArr = [] await axios.get(`api/v1/dailyProTbms ...

  5. [转]Entity Framework 的实体关系

    通过 Entiy Framework实践系列 文章,理了理 Entity Framework 的实体关系. 为什么要写文章来理清这些关系?“血”的教训啊,刚开始使用 Entity Framework  ...

  6. 【JZOJ3379】查询

    description 对于一个整数序列,查询区间第k大数可以在O(logN)的时间内轻松完成.现在我们对这个问题进行推广. 考虑带重复数的集合(multiset).定义在该类集合上的并操作" ...

  7. W: 仓库 “http://ppa.launchpad.net/levi-armstrong/qt-libraries-trusty/ubuntu xenial Release” 没有 Release 文件。

    解决办法:将对应的PPA删除掉即可 使用以下命令切换到对应PPA目录: cd /etc/apt/sources.list.dsudo rm levi-armstrong-ubuntu-qt-libra ...

  8. Python中实现对list做减法操作介绍

    Python中实现对list做减法操作介绍 这篇文章主要介绍了Python中实现对list做减法操作介绍,需要的朋友可以参考下 问题描述:假设我有这样两个list, 一个是list1,list1 = ...

  9. Linux查看温度

    step 1: centos $ sudo yum install lm_sensors ubuntu $ sudo apt-get install lm_sensors step2$ sudo se ...

  10. 学而有道--思维导图式总结(一):Nosql分类

    前言: 众所周知,学习是需要方法的.作为一名java程序员,我们需要学习无数的技能,然而我们的大脑并不买账,学习了一项知识,时间一久就会遗忘, 如何更好高效的回忆起曾经学习过的知识,是极其重要的. 有 ...