题意

设 \(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. Java高级特性——反射

    感谢原文作者:peter_RD_nj 原文链接:https://www.jianshu.com/p/9be58ee20dee 注意:同一个类在JVM中只存在一份字节码对象 概述 定义 JAVA反射机制 ...

  2. ACM-ICPC 2015辽宁省赛

    省赛之于ACM 就是让省内的队伍互相比较而已~~~(何况弱省(本渣校  四个二等四个三等(其实是六个三道题 两个两道题,是院长后来和主办方沟通了下- - (本弱很水,但还是要吐槽:好水的省赛啊!!

  3. memcache启动多个服务

    windows 7 64bit 环境下安装memcached 1.下载后解压到D:\memcached(下载地址:memcached-win64下载地址) 2.安装到windows服务,打开cmd命令 ...

  4. CephFS分布式文件系统

    目录 组件 基本组件 块存储 文件存储 对象存储 特点: 1.高性能: 2.高可用性: 3.高可扩展性: 4.特性丰富: 详细配置 一.准备机器 1.修改主机名 2.修改hosts文件 二.Ceph节 ...

  5. VUE动态生成table表格(element-ui)(新增/删除)

    (直接复制即可测试) 结构(红色部分 data/prop/v-model 数据绑定): <template> <el-table size="small" :da ...

  6. 【HDU6647】Bracket Sequences on Tree(树Hash 树上Dp)

    题目链接 大意 给出一颗树,按下列方式生成一个括号序列. function dfs(int cur, int parent): print('(') for all nxt that cur is a ...

  7. Spring Boot数据访问之动态数据源切换之使用注解式AOP优化

    在Spring Boot数据访问之多数据源配置及数据源动态切换 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中详述了如何配置多数据源及多数据源之间的动态切换.但是需要读数据库的地方,就 ...

  8. python3爬取中国药学科学数据

    今天我表弟说帮忙爬一下中国药学科学数据,导出json格式给他.一共18万条数据. 看了一下网站http://pharm.ncmi.cn/dataContent/admin/index.jsp?subm ...

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

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

  10. FireWall、UTM、GAP、抗DDOS防火墙

    1.信息安全产品分类 1)美国标准分类(NIST-SP800-36) NIST SP800系列标准 SP800是美国NIST(National Institute of Standards and T ...