正题

题目链接:https://www.luogu.com.cn/problem/AT1219


题目大意

nnn个数字,mmm次询问一个区间内ti∗it_i*iti​∗i的最大值,tit_iti​即区间内iii的出现次数。


解题思路

用回滚莫队的思想,对于在不同块中的询问,我们把左端点所在块的右端点作为分界点,显然以后所有与左端点在同一个块中的询问的右端点会单调上升,我们用指针维护这个答案和信息。

那在分界点左边的部分因为不会超过n\sqrt nn​个,所以我们直接暴力搞就好了。

时间复杂度O(nn)O(n\sqrt n)O(nn​)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const ll N=1e5+10;
struct node{ll l,r,id;
}q[N];
ll n,m,T,a[N],b[N],v[N],pr[N],c[N];
bool cmp(node x,node y){if(x.l/T==y.l/T)return x.r<y.r;return x.l<y.l;
}
int main()
{scanf("%lld%lld",&n,&m);for(ll i=1;i<=n;i++)scanf("%lld",&a[i]),b[i]=a[i];sort(b+1,b+1+n);ll cnt=unique(b+1,b+1+n)-b-1;for(ll i=1;i<=n;i++)a[i]=lower_bound(b+1,b+1+cnt,a[i])-b;T=sqrt(n);for(ll i=1;i<=m;i++){scanf("%lld%lld",&q[i].l,&q[i].r);q[i].id=i;}sort(q+1,q+1+m,cmp);q[0].l=-T;ll r=0,bf_ans=0;for(ll x=1;x<=m;x++){if(q[x].l/T==q[x].r/T){ll ans=0;for(ll i=q[x].l;i<=q[x].r;i++)v[a[i]]++,ans=max(ans,v[a[i]]*b[a[i]]);pr[q[x].id]=ans;for(ll i=q[x].l;i<=q[x].r;i++)v[a[i]]=0;q[x].l=q[x-1].l;continue;}int tail=q[x].l/T*T+T-1;if(q[x].l/T!=q[x-1].l/T){for(ll i=1;i<=cnt;i++)c[i]=0;bf_ans=0;r=tail;}while(r<q[x].r)c[a[++r]]++,bf_ans=max(bf_ans,c[a[r]]*b[a[r]]);ll ans=bf_ans;for(ll i=tail;i>=q[x].l;i--)v[a[i]]++,ans=max(ans,(c[a[i]]+v[a[i]])*b[a[i]]);for(ll i=tail;i>=q[x].l;i--)v[a[i]]=0;pr[q[x].id]=ans;}for(ll i=1;i<=m;i++)printf("%lld\n",pr[i]);return 0;
}

AT1219-歴史の研究(历史研究)【回滚莫队】相关推荐

  1. 【周末狂欢赛6】[AT1219]历史研究(回滚莫队),大魔法师(矩阵+线段树),单峰排列

    文章目录 T1:单峰排列 题目 题解 code T2:历史研究 题目 题解 code T3:大魔法师 题目 题解 code 我可能这辈子都更不出来狂欢赛5了,先咕咕 T1:单峰排列 题目 一个n的全排 ...

  2. 历史研究(回滚莫队)

    问题 C: 历史研究 时间限制: 1 Sec  内存限制: 128 MB 提交: 61  解决: 2 [提交] [状态] [命题人:admin] 题目描述 IOI 国历史研究的大牛--JOI 教授,最 ...

  3. BZOJ4241历史研究题解--回滚莫队

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4241 分析 这题就是求区间权值乘以权值出现次数的最大值,一看莫队法块可搞,但仔细想想,莫 ...

  4. 【练习】BZOJ4241: 历史研究(回滚莫队)

    题意 给定一个长度为 n n n的序列,并提出q" role="presentation">qqq个询问,每次询问要求回答区间 [l,r] [ l , r ] [l ...

  5. 【莫队/树上莫队/回滚莫队】原理详解及例题:小B的询问(普通莫队),Count on a tree II(树上莫队),kangaroos(回滚莫队)

    文章目录 问题引入 介绍莫队算法及其实现过程 时间复杂度 莫队算法适用范围 莫队奇偶优化 普通莫队:小B的询问 树上莫队:SP10707 COT2 - Count on a tree II 回滚莫队: ...

  6. 【洛谷P6072 [MdOI2020] Path】【回滚莫队+Trie】

    题意 给一棵 n n n个节点的树,边有边权.定义一条路径的权值为边权的异或和.找两条节点不相交的路径,使得这两条路径的权值和最大. n ≤ 30000 n\le 30000 n≤30000 分析 问 ...

  7. 2021牛客第五场 I.Interval Queries-回滚莫队

    如图:一道很裸的回滚莫队,注意加入的操作和回滚的操作就好了. #include <cstdio> #include <cstring> #include <string& ...

  8. AT1219 歴史の研究 解题报告

    AT1219 歴史の研究 题意 给定一个长为\(n\)的序列\(\{a\}\),询问区间\(a*cnt_a\)的最大值,即某个值乘上出现次数 回退莫队板子 只右移右指针和左指针每次回到块结尾即可. C ...

  9. git:历史版本回滚、重新回到最新版本及取消修改内容

    重新检出历史版本 场景:需要回到之前的版本,修改参数执行一下代码 查看历史版本号 git log -10 #查看最近10次commit的记录 检出历史版本 git checkout <版本号&g ...

最新文章

  1. 闲来无事,总结 Xcode常用快捷键
  2. Xamarin只言片语系列
  3. 如何安装vscode网页版_Windows10专业版/企业版如何安装Microsoft store
  4. 自定义Exchange2003未送达报告(NDR)
  5. 你的“苦劳”,真的不值钱!
  6. 网络协议 8 - TCP协议(上):性恶就要套路深
  7. 刘浩(专业打劫三十年)20155307的预备作业02:
  8. UVA - 101:The Blocks Problem
  9. Java基础---继承
  10. Kylin Cube构建优化
  11. Python的并发并行[3] - 进程[1] - 多进程的基本使用
  12. OLED12864(SSD1306)驱动代码
  13. word to latex 2.56安装方法
  14. 法学生民法方面的论文选题,有什么推荐吗?
  15. UI设计理论和UI总结
  16. html5文字游戏制作工具,橙光文字游戏制作工具
  17. 关于Chrome的广告和弹窗拦截插件
  18. Python奇技淫巧之Pycharm活动模板配置
  19. Neo.4j 使用总结
  20. RTX 3060 快速配置GPU版本tensorflow

热门文章

  1. ajax 偶尔302,关于Ajax 中response出现302的一点见解
  2. 凉凉!面试阿里我被Redis技术专题给搞的昏倒在地~
  3. java线程带来的异常,java多线程练习之捕获子线程异常例子
  4. linux实验目的能学会什么意思,Linux实验.doc
  5. c语言 if 多个判断条件执行顺序_C语言之流程控制选择语句
  6. golang 修改nginx配置文件_「系统架构」Nginx调优,不可错过的几点
  7. python量化常用_Python量化常用函数
  8. 万字总结webpack实战案例配置
  9. linux取设备分辨率,linux 获取系统屏幕分辨率
  10. [Java网络编程基础]端口,协议