AT1219题解
题意
设 \(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题解的更多相关文章
- 题解 AT1219 【歴史の研究】
莫队 简单分析:题面含有IOI(惊),可知此题是IOI(数字三角形)难度(逃). 思路:回滚莫队 当然很多人都是抱着学回滚莫队的目标来看这道题的,所以这里介绍一下回滚莫队. 1.按莫队的思路讲询问排序 ...
- bzoj4241/AT1219 历史研究(回滚莫队)
bzoj4241/AT1219 历史研究(回滚莫队) bzoj它爆炸了. luogu 题解时间 我怎么又在做水题. 就是区间带乘数权众数. 经典回滚莫队,一般对于延长区间简单而缩短区间难的莫队题可以考 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
随机推荐
- nodejs process uncaughtException
用过Node一段时间之后,发现那些在事件主循环里碰到的异常会导致Node进程退出.在许多应用场景下,特别是对那些希望永不当机的服务器程序来说,这都是不接受的.uncaughtException事件会提 ...
- Java实现二叉搜索树
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11406176.html 尝试一下用Java实现二叉搜索树/二叉查找树,记录自己的学习历程. 1 ...
- WEB前端开发--1(Web前端开发综述)
Web前端开发 Web--Web系统 前端--网页上为用户呈现的部分 开发--编写代码 1. 前端与后端 前端:网页上为用户呈现的部分 后端:与数据库进行交互,完成数据存取 2. 网站与 ...
- 基于人工智能标记语言 (AIML)和任务型对话系统(Task)的深度智能对话机器人demo
起因 本demo基于基于人工智能标记语言 (AIML)和开放域问答(WebQA)的深度智能对话模型而来 无意间发现一个基于人工智能标记语言 (AIML)和开放域问答(WebQA)的深度智能对话模型,但 ...
- windows 使用自带的cmd终端进行文件MD5校验
1.使用快捷键win+r,调用运行界面,输入cmd后回车 2.输入certutil -hashfile <文件名称> MD5,回车后,即可校验文件的MD5了(注意写绝对路径)
- mysql视图,索引
一.视图 View 视图是一个虚拟表,是sql语句的查询结果,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成.视图的数据变化会影响到基表,基表的数据变化也会 ...
- Devops 开发运维高级篇之微服务代码上传和代码检查
Devops 开发运维高级篇之微服务代码上传和代码检查 微服务持续集成(1)-项目代码上传到Gitlab 微服务持续集成(2)-从Gitlab拉取项目源码 微服务持续集成(3)-提交到SonarQub ...
- Renix软件如何建立OSPF邻居——网络测试仪实操
OSPF可以通过OSPF向导的方式方便的创建OSPF邻居, 也可以通过纯手工的方式创建OSPF邻居, 本文介绍的是纯手工的方式创建. 在工作中, 推荐使用OSPF向导的方式来创建, 会比较简单和高效. ...
- PPPoE协议测试——网络测试仪实操
前言: 与传统的接入方式相比,PPPoE具有较高的性能价格比,它在包括小区组网建设等一系列应用中被广泛采用,目前流行的宽带接入方式 ADSL 就使用了PPPoE协议. 随着低成本的宽带技术变得日益流行 ...
- 主流的商业智能BI工具推荐,学会数据分析没难度
伴随着大数据概念的深入企业越来越重视大数据,商业智能BI工具已经成为许多企业数据分析的首选.也许有些小伙伴对商业智能BI工具还是有些陌生,在了解商业智能BI工具之前,先来了解一下什么是商业智能. 百度 ...