题目: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. 服务器访问数据库表mysql

    服务器的MySQL配置就不说了,直接说一些用到的基础命令 登陆 show databases; use 数据库: show tables; 执行sql即可: 一定要有分号 select * from ...

  2. 【左偏树】[APIO2012]派遣

    题意可真的是有毒 第一眼树形背包可做?(反正我没用树形背包打过,边上巨佬打的背包似乎没拿分) 后来发现可以贪心搞,我们先把一个节点所有的儿子都取进去,之后不行的话再从大的开始拿走就好了 问题就变成了了 ...

  3. HTML5 上传图片预览

    html5出现之前如果需要上传图片预览 一般都是先上传到服务器然后远程预览 html5出现之后   有个filereader 解决了这问题 //选中图片之后 $("#fileAddPic&q ...

  4. [转]async & await 的前世今生(Updated)

    async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐 ...

  5. Linux下常用操作

    ************************ 镜像操作 ************************************* screen -s name 新建 screen -r name ...

  6. Tomasulo algorithm

    https://en.wikipedia.org/wiki/Tomasulo_algorithm#Applications_and_legacy 1,  what is Tomasulo algori ...

  7. go的单引号、双引号、反引号的区别

    Go语言的字符串类型string在本质上就与其他语言的字符串类型不同: Java的String.C++的std::string以及Python3的str类型都只是定宽字符序列 Go语言的字符串是一个用 ...

  8. elasticsearch配置优化

    调整ES内存分配有多种方式,建议调整 elasticsearch 中的设置(还可以直接修改bin下的启动脚本). # Directory where the Elasticsearch binary ...

  9. Everything-启用http服务器(公网IP)会导致共享文件被搜索引擎搜索

    1. 漏洞利用成功的前提 公网ip 启用http服务器 2.产生原因 启用http服务器功能点:让用户在本地或局域网上的其他电脑使用浏览器进行搜索,并支持文件下载.若拥有公网IP的用户启用此功能,就是 ...

  10. Java学习之二(线程(了解) JVM GC 垃圾回收)

    线程与进程(了解)→JVM→字节码→GC 一.程序 = 算法 + 数据结构(大佬) 二.程序 = 框架 + 业务逻辑(现实) 1.线程与进程.同步与异步 1.1进程是什么? 进程就是操作系统控制的基本 ...