BZOJ4241历史研究——回滚莫队
题目描述
输入
输出
样例输入
9 8 7 8 9
1 2
3 4
4 4
1 4
2 4
样例输出
8
8
16
16
提示
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<bitset>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int block;
int n,m;
struct lty
{
int l,r,id;
}q[100010];
int a[200010];
int h[200010];
ll ans[100010];
ll cnt[200010];
ll res,mx;
int b[100010];
bool cmp(lty x,lty y)
{
return b[x.l]==b[y.l]?x.r<y.r:x.l<y.l;
}
int main()
{
scanf("%d%d",&n,&m);
block=sqrt(n);
for(int i=1;i<=n;i++)
{
b[i]=(i-1)/block+1;
}
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
h[i]=a[i];
}
sort(h+1,h+1+n);
int num=unique(h+1,h+1+n)-h-1;
for(int i=1;i<=n;i++)
{
a[i]=lower_bound(h+1,h+1+num,a[i])-h;
}
for(int i=1;i<=m;i++)
{
scanf("%d%d",&q[i].l,&q[i].r);
q[i].id=i;
}
sort(q+1,q+1+m,cmp);
int R=0,L=0;
for(int i=1;i<=m;i++)
{
if(b[q[i].l]!=L)
{
memset(cnt,0,sizeof(cnt));
R=(L=b[q[i].l])*block+1;
mx=cnt[a[R]]=h[a[R]];
}
if(b[q[i].l]==b[q[i].r])
{
cnt[a[R]]-=h[a[R]];
res=0;
for(int j=q[i].l;j<=q[i].r;j++)
{
res=max(res,cnt[a[j]]+=h[a[j]]);
}
ans[q[i].id]=res;
for(int j=q[i].l;j<=q[i].r;j++)
{
cnt[a[j]]-=h[a[j]];
}
cnt[a[R]]+=h[a[R]];
}
else
{
while(R<q[i].r)
{
++R;
mx=max(mx,cnt[a[R]]+=h[a[R]]);
}
ans[q[i].id]=mx;
for(int j=b[q[i].l]*block;j>=q[i].l;j--)
{
ans[q[i].id]=max(ans[q[i].id],cnt[a[j]]+=h[a[j]]);
}
for(int j=b[q[i].l]*block;j>=q[i].l;j--)
{
cnt[a[j]]-=h[a[j]];
}
}
}
for(int i=1;i<=m;i++)
{
printf("%lld\n",ans[i]);
}
}
BZOJ4241历史研究——回滚莫队的更多相关文章
- BZOJ4241:历史研究(回滚莫队)
Description 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 ...
随机推荐
- 广州.NET微软技术俱乐部 微信群有用信息集锦
考虑到广州.NET微软技术俱乐部 微信群 十分活跃. 有用信息很有可能被淹没. 所以建立此贴. 首先群的活跃是十分重要的. 所以我是不可能把群搞得像技术论坛和github一样, 因为微信群的定位我在& ...
- Bootstrap-table表格初始化表格数据
一.项目说明 ①此项目是ASP.NET项目,开发语言是C# ②bootstrap-table使用需要下载对应的css和js插件 ③具体详情还需查看api文档 二.前端代码 <div class= ...
- 高端内存映射之kmap_atomic固定映射--Linux内存管理(二十一)
1 固定映射 1.1 数据结构 linux高端内存中的临时内存区为固定内存区的一部分, 对于固定内存在linux内核中有下面描述 x86 arm arm64 arch/x86/include/asm/ ...
- PHP实现表单提交发送邮件
只需要三个文件就可以了: 注意: 文件自命名需修改表单提交url,包含的类文件名: HTML表单文件: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...
- 英语口语练习系列-C03-常用问句
连接到英语口语系列总分类 连接到上一章抱怨 枫桥夜泊 How are you doing?你好吗? 美国人见面时候最常用的打招呼方式: "Hey! How are you doing?&qu ...
- javascript基础之函数
javascript的函数定义与python有很大的区别,的记住格式就好,下面请看代码 // 函数 // 简单定义 function func() { console.log('hello word' ...
- Vector与ArrayList区别
1)Vector的方法都是同步的(Synchronized),是线程安全的: ArrayList的方法是线程不安全的. 由于线程同步必然会影响性能,因此,ArrayList的性能比Vector好. 请 ...
- PSQLException: FATAL: no pg_hba.conf entry for host "127.0.0.1", user "ambari", database "ambari", SSL off
On your Postgres server, you will need to update your pg_hba.conf file to allow access for the ambar ...
- css实现单行(多行)文本溢出显示 ...
overflow: hidden; text-overflow:ellipsis; white-space: nowrap; 当然还需要加宽度width属来兼容部分浏览. 以上为单行文本溢出===== ...
- 18 python 初学(time、random 模块)
# _author: lily # _date: 2019/1/13 import time import datetime print(help(time)) # print(time.time() ...