BZOJ4241:历史研究(回滚莫队)
Description
Input
Output
Sample Input
9 8 7 8 9
1 2
3 4
4 4
1 4
2 4
Sample Output
8
8
16
16
HINT
Solution
学回滚莫队的契机是昨晚上$gay$哥在$Loj$群里问区间莫队的做法,
然后一位大爷提到回滚莫队这种东西,我感觉挺有意思的就学了一下……
看完就成回滚莫队板子题了QwQ
Code
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define N (100009)
#define LL long long
using namespace std; struct Que{int l,r,num; LL ans;}Q[N];
int n,m,unit,pos=;
int a[N],b[N],v[N],ID[N],Keg[N];
LL ans; bool cmp1(Que x,Que y) {return ID[x.l]==ID[y.l]?x.r<y.r:ID[x.l]<ID[y.l];}
bool cmp2(Que x,Que y) {return x.num<y.num;} LL Calc(int l,int r)
{
LL ans=;
for (int i=l; i<=r; ++i) Keg[b[i]]=;
for (int i=l; i<=r; ++i)
Keg[b[i]]++, ans=max(ans,(LL)Keg[b[i]]*a[i]);
for (int i=l; i<=r; ++i) Keg[b[i]]=;
return ans;
} void Update(int x)
{
Keg[b[x]]++;
ans=max(ans,(LL)Keg[b[x]]*a[x]);
} void MoQueue(int num)
{
ans=;
for (int i=; i<=n; ++i) Keg[i]=;
int L=min(unit*num,n);
int l=L+,r=L;
while (ID[Q[pos].l]==num)
{
if (ID[Q[pos].l]==ID[Q[pos].r])
{
Q[pos].ans=Calc(Q[pos].l,Q[pos].r);
++pos; continue;
}
while (r<Q[pos].r) Update(++r);
LL tmp=ans;
while (l>Q[pos].l) Update(--l);
Q[pos].ans=ans; ans=tmp;
while (l<L+) Keg[b[l]]--, l++;
++pos;
}
} int main()
{
scanf("%d%d",&n,&m);
unit=sqrt(n);
for (int i=; i<=n; ++i)
scanf("%d",&a[i]), v[i]=a[i];
sort(v+,v+n+);
int num=unique(v+,v+n+)-v-;
for (int i=; i<=n; ++i)
b[i]=lower_bound(v+,v+num+,a[i])-v; for (int i=; i<=m; ++i)
scanf("%d%d",&Q[i].l,&Q[i].r), Q[i].num=i; int cnt=n/unit+(n%unit!=);
for (int i=; i<=n; ++i)
ID[i]=(i-)/unit+; sort(Q+,Q+m+,cmp1);
for (int i=; i<=cnt; ++i)
MoQueue(i);
sort(Q+,Q+m+,cmp2);
for (int i=; i<=m; ++i)
printf("%lld\n",Q[i].ans);
}
BZOJ4241:历史研究(回滚莫队)的更多相关文章
- BZOJ4241历史研究——回滚莫队
题目描述 IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开始着手调查日记中记载的事件. 日记中记录了连 ...
- bzoj4241/AT1219 历史研究(回滚莫队)
bzoj4241/AT1219 历史研究(回滚莫队) bzoj它爆炸了. luogu 题解时间 我怎么又在做水题. 就是区间带乘数权众数. 经典回滚莫队,一般对于延长区间简单而缩短区间难的莫队题可以考 ...
- BZOJ.4241.历史研究(回滚莫队 分块)
题目链接 \(Description\) 长度为n的数列,m次询问,每次询问一段区间最大的 \(A_i*tm_i\) (重要度*出现次数) \(Solution\) 好像可以用莫队做,但是取max的操 ...
- 「JOISC 2014 Day1」历史研究 --- 回滚莫队
题目又臭又长,但其实题意很简单. 给出一个长度为\(N\)的序列与\(Q\)个询问,每个询问都对应原序列中的一个区间.对于每个查询的区间,设数\(X_{i}\)在此区间出现的次数为\(Sum_{X_{ ...
- 【题解】BZOJ4241: 历史研究(魔改莫队)
[题解]BZOJ4241: 历史研究(魔改莫队) 真的是好题啊 题意 给你一个序列和很多组询问(可以离线),问你这个区间中\(\max\){元素出现个数\(\times\)元素权值} IOI国历史研究 ...
- AT1219 歴史の研究 回滚莫队
可在vj上提交:https://vjudge.net/problem/AtCoder-joisc2014_c 题意: IOI 国历史研究的第一人--JOI 教授,最近获得了一份被认为是古代 IOI 国 ...
- AT1219 歴史の研究[回滚莫队学习笔记]
回滚莫队例题. 这题的意思大概是 设 \(cnt_i\) 为 l ~ r 这个区间 \(i\) 出现的次数 求\(m\) 次询问 求 l~r 的 max {\(a_i\) * \(cnt_i\)} \ ...
- 【BZOJ4241】历史研究(回滚莫队)
题目: BZOJ4241 分析: 本校某些julao乱膜的时候发明了个"回滚邹队",大概意思就是某个姓邹的太菜了进不了省队回滚去文化课 回滚莫队裸题qwq(话说这个名字是不是莫队本 ...
- 2018.08.14 bzoj4241: 历史研究(回滚莫队)
传送们 简单的回滚莫队,调了半天发现排序的时候把m达成了n... 代码: #include<bits/stdc++.h> #define N 100005 #define ll long ...
随机推荐
- java利器------反射机制
java反射的概念:java的反射机制是指在运行状态下,对于一个类来说,可以得到这个类的所有方法和属性.对于一个对象来说,可以调用这个对象的人和方法和属性. 反射机制首先会拿到该类的字节码文件(Cla ...
- UML 类图详解
转载来源:http://blog.csdn.net/shift_wwx/article/details/79205187 可以参考:http://www.uml.org.cn/oobject/2012 ...
- AutoFac使用方法总结二:事件与依赖循环
事件 AutoFac支持三种事件:OnActivating,OnActivated,OnRelease.OnActivating在注册组件使用之前会被调用,此时可以替换实现类或者进行一些其他 ...
- LOJ#6032. 「雅礼集训 2017 Day2」水箱
传送门 首先可以有一个平方复杂度的 \(DP\) 设 \(f_{i,j}\) 表示前面 \(i\) 个小格,高度为 \(j\) 的最大答案 令 \(h_i\) 表示隔板 \(i\) 的高度 当 \(j ...
- BZOJ4636: 蒟蒻的数列(动态开节点线段树)
题意 题目链接 Sol 直接上动态开节点线段树 因为只有一次询问,所以中途不需要下传标记 #include<bits/stdc++.h> #define LL long long usin ...
- the interconversion of String and StringBuilder
package com.itheima_03; /* * StringBuilder和String的相互转换 * * StringBuilder -- String * public String t ...
- git pull文件时和本地文件冲突的问题
在使用git pull代码时,经常会碰到有冲突的情况,提示如下信息: error: Your local changes to 'c/environ.c' would be overwritten b ...
- wdcpV3面板安装ssl证书 apache教程 子站SSL配置
本帖最后由 q1082121 于 2016-11-24 12:31 编辑 方案二 apache1.把apache类型的ssl三个文件上传到:/www/wdlinux//www/wdlinux/http ...
- 课后作业week 5 —— 两款修图软件优势及创新分析
由于我平时没事也会修修照片什么的,也用过一些不同种类的修图软件,这次作业就选择了其中两款比较热门的软件进行分析. 说到手机修图app,很多人很容易想到“美图秀秀”,的确这款app在修图软件领域的确算的 ...
- oracle截取字符串去掉字段末尾指定长度的字符
lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算string所占的字符长度:返回字符串的长度,单位是字符 eg: //去掉该 ...