题意

设 \(a\) 的价值为 \(a \times cnt_a\)(\(cnt_a\) 为 \(a\) 在区间中出现的次数),求区间种某种元素,使得这种元素的价值最大。

因为设计出现元素的次数,所以首先考虑莫队。

由于 Add 操作很好写,Del 操作不会写,所以我们考虑一种专门处理 Del 不容易处理的莫队:回滚莫队。

回滚莫队将询问区间分为两部分。设 \([L,R]\) 的左端点 \(L\) 所在块的右端点为 \(p\),则将区间分为 \([L,p]\) 和 \([p,R]\)。

我们发现对于左端点所在块不变的情况,右端点 $ R $ 是单调递增的,可以直接 Add;而左端点的数量级在 \(O(\sqrt n)\) 级别,我们可以先只计算右边的区间的贡献,然后向左 Add,最后撤回向左的 Add。

因为向左的操作只有 \(O(\sqrt n)\) 个,所以撤回操作的复杂度也是 \(O(\sqrt n)\) 的。

不过这道题有一点儿细节,具体见代码。

#include<algorithm>
#include<cstdio>
#include<cmath>
const int M=1e5+5;
int n,m,p,a[M],CB[M],lsh[M];long long cur,tmp,ans[M];
int len,v[M],mdf[M];bool vis[M];
inline long long max(const long long&a,const long long&b){
return a>b?a:b;
}
struct Query{
int L,R,p,id;
inline bool operator<(const Query&it)const{
return p==it.p?R<it.R:L<it.L;
}
}q[M];
inline void AddR(const int&val){
cur=max(cur,1ll*++CB[val]*lsh[val]);
}
inline void AddL(const int&val){
if(!vis[val]){
++len;mdf[len]=val;v[len]=CB[val];vis[val]=true;
}
tmp=max(tmp,1ll*++CB[val]*lsh[val]);
}
signed main(){
register int i,j,id;
scanf("%d%d",&n,&m);p=ceil(n/sqrt(2.0*m/3));
for(i=1;i<=n;++i)scanf("%d",a+i),lsh[++len]=a[i];
std::sort(lsh+1,lsh+len+1);len=std::unique(lsh+1,lsh+len+1)-lsh-1;
for(i=1;i<=n;++i)a[i]=std::lower_bound(lsh+1,lsh+len+1,a[i])-lsh;len=0;
for(i=1;i<=m;++i){
scanf("%d%d",&q[i].L,&q[i].R);
q[i].p=(q[i].L-1)/p+1;q[i].id=i;
}
std::sort(q+1,q+m+1);
for(i=1;i<=m;++i){
const int&QL=q[i].L,&QR=q[i].R;
if(i==1||q[i].p!=q[i-1].p){
for(j=1;j<=n;++j)CB[j]=0;
id=q[i].p*p;cur=0;
}
if((QL-1)/p==(QR-1)/p){
tmp=0;
for(j=QL;j<=QR;++j)AddL(a[j]);
}
else{
while(id<QR)AddR(a[++id]);tmp=cur;
for(j=QL;j<=q[i].p*p;++j)AddL(a[j]);
}
for(j=1;j<=len;++j)CB[mdf[j]]=v[j],vis[mdf[j]]=false;
ans[q[i].id]=tmp;len=0;
}
for(i=1;i<=m;++i)printf("%lld\n",ans[i]);
}

AT1219题解的更多相关文章

  1. 题解 AT1219 【歴史の研究】

    莫队 简单分析:题面含有IOI(惊),可知此题是IOI(数字三角形)难度(逃). 思路:回滚莫队 当然很多人都是抱着学回滚莫队的目标来看这道题的,所以这里介绍一下回滚莫队. 1.按莫队的思路讲询问排序 ...

  2. bzoj4241/AT1219 历史研究(回滚莫队)

    bzoj4241/AT1219 历史研究(回滚莫队) bzoj它爆炸了. luogu 题解时间 我怎么又在做水题. 就是区间带乘数权众数. 经典回滚莫队,一般对于延长区间简单而缩短区间难的莫队题可以考 ...

  3. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  4. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  5. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  6. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  7. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  8. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  9. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

随机推荐

  1. iOS中播放音效

    #import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewCont ...

  2. JAVA初学--Servlet详解

    一.什么是servlet? 处理请求和发送响应的过程是由一种叫做Servlet的程序来完成的,并且Servlet是为了解决实现动态页面而衍生的东西.理解这个的前提是了解一些http协议的东西,并且知道 ...

  3. pyrealsense2学习

    如何得到realsense设备信息 前提:将D455连接在电脑上,并且已经下载好 Realsense Viewer 打开Realsense Viewer--> Info, 便可得到相机的一些参数 ...

  4. LNMP 架构 与 部署 uwsgi 服务

    内容概要 nginx 配置文件中 location 匹配符号 LNMP 架构 uwsgi 服务部署 内容详细 一.location 使用 Nginx Location 可以控制访问网站的路径,但一个 ...

  5. suse 12 升级 OpenSSH-7.2p2 到 OpenSSH-8.4p1

    文章目录 1.查看当前当前环境信息 1.1.查看openssh当前版本 1.2.查看当前linux发行版 2.部署telnet-server 2.1.下载telnet-server 2.2.配置tel ...

  6. ASP.NET Core 6框架揭秘-实例演示版[持续更新中…]

    作为<ASP.NET Core 3框架揭秘>的升级版,<ASP.NET Core 6框架揭秘>提供了很多新的章节,同时对现有的内容进行大量的修改.虽然本书旨在对ASP.NET ...

  7. [虚拟化]虚拟机 XML 配置

    虚拟机 XML 配置示例 虚拟机的 XML 配置(也称为 域 XML )决定虚拟机的设置和组件.下表显示了虚拟机(VM)的 XML 配置示例并解释了其内容. 要获取虚拟机的 XML 配置,您可以使用 ...

  8. 『无为则无心』Python面向对象 — 58、类方法和静态方法

    目录 1.实例方法 2.类方法 (1)类方法特点 (2)类方法使用场景 3.静态方法 (1)静态方法特点 (2)静态方法使用场景 1.实例方法 实例方法既可以调用静态方法也可以调用类方法. # 定义一 ...

  9. 在 WPF 客户端实现 AOP 和接口缓存

    随着业务越来越复杂,最近决定把一些频繁查询但是数据不会怎么变更的接口做一下缓存,这种功能一般用 AOP 就能实现了,找了一下客户端又没现成的直接可以用,嗐,就只能自己开发了. 代理模式和AOP 理解代 ...

  10. C# 事件Event(个人整理)

    内容来源:MSN:https://docs.microsoft.com/zh-cn/dotnet/csharp/event-pattern 操作符详解(上)   https://www.youtube ...