2018.08.14 bzoj4241: 历史研究(回滚莫队)
传送们
简单的回滚莫队,调了半天发现排序的时候把m达成了n。。。
代码:
#include<bits/stdc++.h>
#define N 100005
#define ll long long
using namespace std;
ll cnt[N],tot[N],val[N],ans[N],rk[N],mp[N],tmp;
int n,m,blo[N],block,num,pos=1,siz;
struct Q{int l,r,id;}q[N];
inline ll read(){
ll ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
inline void write(ll x){
if(x>9)write(x/10);
putchar((x%10)^48);
}
inline ll max(ll a,ll b){return a>b?a:b;}
inline bool cmp(Q a,Q b){return blo[a.l]==blo[b.l]?a.r<b.r:blo[a.l]<blo[b.l];}
inline void update(int x){++cnt[rk[x]],tmp=max(tmp,cnt[rk[x]]*val[x]);}
inline void reupdate(int x){--cnt[rk[x]];}
inline ll query(int ql,int qr){
ll ret=0;
for(int i=ql;i<=qr;++i)tot[rk[i]]=0;
for(int i=ql;i<=qr;++i)++tot[rk[i]],ret=max(ret,tot[rk[i]]*val[i]);
return ret;
}
inline int solve(int i,int blos){
tmp=0;
for(int j=1;j<=n;++j)cnt[j]=0;
int L=min(blos*block,n),ql=L+1,qr=L;
for(;blo[q[i].l]==blos;++i){
if(blo[q[i].l]==blo[q[i].r]){ans[q[i].id]=query(q[i].l,q[i].r);continue;}
while(qr<q[i].r)update(++qr);
ll remov=tmp;
while(ql>q[i].l)update(--ql);
ans[q[i].id]=tmp,tmp=remov;
while(ql<L+1)reupdate(ql++);
}
return i;
}
int main(){
n=read(),m=read(),block=sqrt(n);
for(int i=1;i<=n;++i)mp[i]=val[i]=read(),blo[i]=(i-1)/block+1;
sort(mp+1,mp+n+1),siz=unique(mp+1,mp+n+1)-mp-1;
for(int i=1;i<=n;++i)rk[i]=lower_bound(mp+1,mp+siz+1,val[i])-mp;
for(int i=1;i<=m;++i)q[i].l=read(),q[i].r=read(),q[i].id=i;
sort(q+1,q+m+1,cmp);
for(int i=1;i<=blo[n];++i)pos=solve(pos,i);
for(int i=1;i<=m;++i)write(ans[i]),puts("");
return 0;
}
2018.08.14 bzoj4241: 历史研究(回滚莫队)的更多相关文章
- BZOJ4241:历史研究(回滚莫队)
Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开始着手调查日记中记载的事件. ...
- 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(话说这个名字是不是莫队本 ...
随机推荐
- 4. mybatis实战教程(mybatis in action)之四:实现关联数据的查询
转自:https://www.cnblogs.com/shanheyongmu/p/5653599.html 有了前面几章的基础,对一些简单的应用是可以处理的,但在实际项目中,经常是关联表的查询,比如 ...
- Webservice 返回数据集 DataSet 及Android显示数据集LiveBindings
一.服务端 New TSoapDataModule 添加控件 TDataSetProvider,TClientDataSet,TADOQuery,TADOConnection 添加方法 functio ...
- nginx HttpLuaModule
http://wiki.nginx.org/HttpLuaModule#Directives Name ngx_lua - Embed the power of Lua into Nginx This ...
- Maven的配置以及IDEA导入本地Maven
1.首先看你的电脑jdk的环境变量是否配成功 2.Maven的下载地址:http://maven.apache.org/download.cgi 3.下载完成后解压到你要安装的目录,我的是直接放在D: ...
- 行矩阵列矩阵D3D&GL&U3D
void Start () { //矩阵函数原型:Matrix4x4(Vector4 colum0, Vector4 colum1, Vector4 colum2, Vector4 colum3),这 ...
- (一)由浅入深学习springboot中使用redis
很多时候,我们会在springboot中配置redis,但是就那么几个配置就配好了,没办法知道为什么,这里就详细的讲解一下 这里假设已经成功创建了一个springboot项目. redis连接工厂类 ...
- win10为什么不能把文件直接拖拽
- HTML实现文件拖动上传
在大型企业的开发过程中,很多比较有趣而实际的功能往往都是让大家望而却步,我给大家带来一个百度云盘和360云盘的HTML5多文件拖动上传技术: 1:记得导入:common-fileupload.jar包 ...
- ASP.NET MVC 项目文件夹结构
首先,打开Visual Studio, 新建一个demo 项目的solution,选择 Blank Soution. 第二步,创建文件夹,按自己的需求创建.在这个Demo 中,我将创建4个文件夹. P ...
- Array Product(模拟)
Array Product http://codeforces.com/problemset/problem/1042/C You are given an array aa consisting o ...