洛谷题目

AT1219


分析

不满足区间减性质的运算,如最值,就不能用普通莫队求,

考虑回滚莫队,它的核心思想就是若区间在块内直接暴力,

否则将右端点从小到大排序,右端点按普通莫队求,那么左端点由于只在一个块内,

所以询问完跳到块末,由于块的大小为根号,影响复杂度的实际上是右端点,

然后每次处理完相同左端点块清除标记


代码

#include <cstdio>
#include <cctype>
#include <cmath>
#include <algorithm>
#define rr register
using namespace std;
const int N=100011; typedef long long lll;
struct rec{int l,r,rk;}q[N]; lll Ans[N];
int a[N],b[N],pos[N],c[N],m,tot,bl,n,cnt[N],cnT[N];
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline void print(lll ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
bool cmp(rec x,rec y){return (pos[x.l]^pos[y.l])?(pos[x.l]<pos[y.l]):(x.r<y.r);}
inline signed min(int a,int b){return a<b?a:b;}
inline lll max(lll a,lll b){return a>b?a:b;}
inline lll calc(int l,int r){
rr lll ans=0;
for (rr int i=l;i<=r;++i){
++cnT[a[i]];
ans=max(ans,1ll*cnT[a[i]]*b[a[i]]);
}
for (rr int i=l;i<=r;++i) --cnT[a[i]];
return ans;
}
signed main(){
n=iut(),m=iut(),bl=sqrt(n)+1;
for (rr int i=1;i<=n;++i) b[i]=a[i]=iut(),pos[i]=(i-1)/bl+1;
sort(b+1,b+1+n),tot=unique(b+1,b+1+n)-b-1;
for (rr int i=1;i<=n;++i) a[i]=lower_bound(b+1,b+1+tot,a[i])-b;
for (rr int i=1;i<=m;++i) q[i]=(rec){iut(),iut(),i};
sort(q+1,q+1+m,cmp);
for (rr int L=1,R;L<=m;L=R+1){
rr int now=pos[q[L].l],Tot=0; rr lll ans=0;
rr int Ed=min(now*bl,n),l=Ed+1,r=Ed;
for (R=L;pos[q[R].l]==now;++R); --R;
for (rr int i=L;i<=R;++i)
if (now==pos[q[i].r]) Ans[q[i].rk]=calc(q[i].l,q[i].r);
else{
while (r<q[i].r){
++cnt[a[++r]],c[++Tot]=a[r];
ans=max(ans,1ll*cnt[a[r]]*b[a[r]]);
}
rr lll tmp=ans;
while (l>q[i].l)
++cnt[a[--l]],ans=max(ans,1ll*cnt[a[l]]*b[a[l]]);
Ans[q[i].rk]=ans,ans=tmp;
while (l<=Ed) --cnt[a[l++]];
}
for (rr int i=1;i<=Tot;++i) --cnt[c[i]];
}
for (rr int i=1;i<=m;++i)
print(Ans[i]),putchar(10);
return 0;
}

#回滚莫队#AT1219 歴史の研究的更多相关文章

  1. AT1219 歴史の研究 回滚莫队

    可在vj上提交:https://vjudge.net/problem/AtCoder-joisc2014_c 题意: IOI 国历史研究的第一人--JOI 教授,最近获得了一份被认为是古代 IOI 国 ...

  2. AT1219 歴史の研究[回滚莫队学习笔记]

    回滚莫队例题. 这题的意思大概是 设 \(cnt_i\) 为 l ~ r 这个区间 \(i\) 出现的次数 求\(m\) 次询问 求 l~r 的 max {\(a_i\) * \(cnt_i\)} \ ...

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

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

  4. BZOJ4241:历史研究(回滚莫队)

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

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

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

  6. 2018.08.14 bzoj4241: 历史研究(回滚莫队)

    传送们 简单的回滚莫队,调了半天发现排序的时候把m达成了n... 代码: #include<bits/stdc++.h> #define N 100005 #define ll long ...

  7. bzoj4241: 历史研究(回滚莫队)

    传送门 这是一个叫做回滚莫队的神奇玩意儿 是询问,而且不强制在线,就决定是你了莫队 如果是每次插入一个数是不是很简单? 然而悲剧的是我们莫队的时候不仅要插入数字还要删除数字 那么把它变成只插入不就行了 ...

  8. 【BZOJ4241】历史研究(回滚莫队)

    题目: BZOJ4241 分析: 本校某些julao乱膜的时候发明了个"回滚邹队",大概意思就是某个姓邹的太菜了进不了省队回滚去文化课 回滚莫队裸题qwq(话说这个名字是不是莫队本 ...

  9. BZOJ4241:历史研究(回滚莫队)

    题意:给定N个数字,Q次询问,询问这个区间的最大加权众数是多少. 加权众数是指出现次数*数字大小.N,Q<1e5. 思路:不难发现可以N*sqrtN*logN的思路做,但是应该过不了. 这个Ns ...

  10. BZOJ4241 历史研究 【回滚莫队】

    题目描述:给出一个长度为\(n\)的数组,每次询问区间 \([l,r]\),求 \(\max\limits_{x}x*cnt_x\),其中 \(cnt_x\) 表示 \(x\) 在区间 \([l,r] ...

随机推荐

  1. 关于RabbitMQ消费者预取消息数量参数的合理设置

    根据RabbitMQ官方文档描述,可以通过"预取数量"来限制未被确认的消息个数,本质上这也是一种对消费者进行流控的方法. 详见:https://www.rabbitmq.com/c ...

  2. Linux驱动开发笔记(一):helloworld驱动源码编写、makefile编写以及驱动编译基本流程

    前言   基于linux的驱动开发学习笔记,本篇是描述了一个字符驱动的基础开发流程,以便做嵌入式开发多年的应用或者系统学习驱动开发.   笔者自身情况   笔者拥有硬件基础,单片机软硬基础,linux ...

  3. 命令行解析parse.parse_know_args()

    简介 在接受到多余的命令行参数时不报错,只把第一个参数作为当前使用的命令参数, 剩余部分留给其它程序使用,返回一个tuple类型的命名空间和一个保存着余下的命令行字符的list 示例 import a ...

  4. 探究C# dynamic动态类型本质

    本周在做接口动态传参的时候思考了个问题:如何把一个json字符串,转成C#动态类? 比如由 { 'userId': 100, 'id': 1, 'title': 'hello world', 'com ...

  5. Word中的公式复制到Visio中乱码问题

    将word中编辑好的公式复制到Visio中出现乱码问题 如图所示问题: 解决方案(Visio 选项 --> 高级 --> 显示 ->勾选禁用增强元文件优化) 具体的公式导入和解决操作 ...

  6. 使用@RequestBody注解踩的坑

    一.问题由来 最近在和前端调试一个自己写的接口时,频频出现问题,让我很是烦恼.因此写下这篇博文来记录开发中遇到的一些问题.第一个问题是 前端页面传递参数后,后台不能正常接收参数.我写好接口以后,通过s ...

  7. C#实现一个简单的日志类

    目录 自定义日志类 NLog版本的日志类 Serilog版本的日志类 上个月换工作,新项目又要重新搭建基础框架,把日志实现部分单独记录下来方便以后参考. 自定义日志类 代码大部分使用ChatGPT生成 ...

  8. C#项目管理引用的dll文件

    这篇文章主要简单记录一下C#项目的dll文件管理方法,以便后期使用. 设置dll路径 参考C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁中间的 方法一:配置App.config文件的pri ...

  9. 【刷题】LeetCode 239 滑动窗口最大值- Python手撕最大堆

    手撕版 最大堆的完全实现, 堆中元素为二元组(num, idx),比较时用数值,赋值或交换时用整个元组. class Heap: def __init__(self, arr, capacity): ...

  10. Android Studio 下载jcenter依赖失败问题及解决

    优先国内的镜像下载即可 我用的华为和阿里云的国内镜像 google() maven { url 'https://jitpack.io' } maven { url 'http://maven.ali ...