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 ...
随机推荐
- MyBatis和Hibernate的优缺点对比。
Hibernate的优点: 1.hibernate是全自动,hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql. 2.功能强 ...
- SQLSERVER查询整个数据库中某个特定值所在的表和字段的方法
这几天有业务部门需要使用一个SAP B1老系统 中的报表,但是由于此报表没有加时间条件,导致一旦开始查询 就会导致B1系统异常退出.由于报表对应的SQL 是存在数据库中,所以想通过查找到这个报表的S ...
- Java泛型类型
E element 常用于集合中表示存放元素 T type Java类 K key 键 V value 值 N number 数值类型 ? 不确定的类型 一种约定俗成吧
- Java Web整合开发王者归来(JSP + Servlet + Struts + Hibernate + Spring) - 读书笔记
第1章 状态码表示响应类型: 保留 表示请求成功地接收 完成请求客户需进一步细化请求 客户错误 服务器错误 Web服务器: Apache服务器,特长是处理静态页面,效率非常高. Tomcat提供对JS ...
- Javascript全选,反选,全不选的实现代码
使用js实现全选.反选.全不选. 代码如下: <html> <head> <script type="text/javascript"> fun ...
- BZOJ5317:[JSOI2018]战争(闵可夫斯基和)
令 \(a\in A,b\in B\) 则移动向量 \(\omega\) 使得存在 \(b+\omega=a\) 那么 \(\omega\) 需要满足 \(\omega=a−b\) 黑科技:闵可夫斯基 ...
- Flutter: 图解 ListView 的多种绑定方式
小菜昨天刚学习了一下底部状态栏 BottomNavigationBar 的基本使用方法,今天学习一下 ListView 的基本用法. 小菜觉得 Flutter 中 ListView ...
- csv注入漏洞原理&&实战
前言 为了找工作,巩固巩固知识.本文会介绍 csv 注入漏洞的原理,最后给出一个示例. 正文 在 csv 文件 和 xlsx 文件中的每一项的值如果是 =, @, +, - 就会被 excel 识 ...
- 【CVE-2018-11116】openwrt rpcd 配置文件错误导致访问控制失效
User can access to ubus over HTTP. This way depend on rpcd service. When misconfigure the rpcd's ACL ...
- idea 断点调试
一.步骤控制 二.查看变量 IDEA debug查看变量值有3种方法: 1.鼠标悬浮 2.alt+f8快捷键(选中变量表达式,比如匿名变量或方法参数,再按atl+f8,接着回车) 3.debug窗口查 ...