faebdc的烦恼 莫队
faebdc的烦恼 莫队
思路
有点难想的莫队。
首先我们肯定要一个cnt[i]记录难度i出现的次数,但是我们发现每次删去一个难度后,如果那个难度的个数恰好是当前最多次数,我们就可能要更新一下答案,而这取决于有多少难度的个数恰好是当前最多次数,于是我们再开一个sum[i]记录有多少难度的个数为i。
经过上述分析容易得到莫队更新规则:
inline void add(int x){
--sum[cnt[a[x]]];
++cnt[a[x]];
++sum[cnt[a[x]]];
ans=max(cnt[a[x]], ans);
}
inline void del(int x){
--sum[cnt[a[x]]];
if(cnt[a[x]]==ans&&sum[cnt[a[x]]]==0) --ans;
--cnt[a[x]];
++sum[cnt[a[x]]];
}
另外注意一下因为范围为\(-10^5\le a[i]\le 10^5\),所以我们可以将所有数先加上\(10^5\)
例码
#include <cstdio>
#include <algorithm>
#include <cmath>
#define MAXN 100010
#define MAXQ 200010
using namespace std;
int ans,cnt[100001*2],sum[100001];
int a[MAXN];
inline void add(int x){
--sum[cnt[a[x]]];
++cnt[a[x]];
++sum[cnt[a[x]]];
ans=max(cnt[a[x]], ans);
}
inline void del(int x){
--sum[cnt[a[x]]];
if(cnt[a[x]]==ans&&sum[cnt[a[x]]]==0) --ans;
--cnt[a[x]];
++sum[cnt[a[x]]];
}
struct nod{
int l,r,bid,qid;
} q[MAXQ];
bool cmp(const nod &a, const nod &b){
return (a.bid^b.bid?(a.l<b.l):((a.bid&1)?(a.r<b.r):(a.r>b.r)));
}
int n,m,blo,res[MAXQ];
int main()
{
scanf("%d %d", &n, &m);
blo=n/sqrt(m*2/3);
for(int i=1;i<=n;++i) scanf("%d", &a[i]),a[i]+=100000;
for(int i=1;i<=m;++i){
scanf("%d %d", &q[i].l, &q[i].r);
q[i].bid=q[i].l/blo;
q[i].qid=i;
}
sort(q+1, q+1+m, cmp);
int l=1,r=1;cnt[a[1]]=1;sum[1]=1;ans=1;
for(int i=1;i<=m;++i){
while(l<q[i].l) del(l++);
while(l>q[i].l) add(--l);
while(r>q[i].r) del(r--);
while(r<q[i].r) add(++r);
res[q[i].qid]=ans;
}
for(int i=1;i<=m;++i) printf("%d\n", res[i]);
return 0;
}
2019.10 update 才发现这次国庆集训Day1 老师不就是faebdc吗?!
faebdc的烦恼 莫队的更多相关文章
- 【luogu1797】faebdc的烦恼-莫队
题目背景 鸟哥(faebdc)自从虐暴NOIP2013以来依然勤奋学习,每天上各种OJ刷题,各种比赛更是不在话下.但这天他遇到了一点小小的麻烦……在一届“Orz鸟哥杯”上,题目是在是太多了!足有n道! ...
- 普通莫队--洛谷P1997 【faebdc的烦恼】
离散化+莫队 cnt数组表示某个颜色出现的次数 sum数组表示某个数量出现的颜色种类 其它细节问题就按照莫队的模板来的 #include<cstdio> #include<algor ...
- BZOJ 3289: Mato的文件管理[莫队算法 树状数组]
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 2399 Solved: 988[Submit][Status][Di ...
- NBUT 1457 莫队算法 离散化
Sona Time Limit:5000MS Memory Limit:65535KB 64bit IO Format: Submit Status Practice NBUT 145 ...
- 【填坑向】bzoj2038小Z的袜子 莫队
学莫队必做题,,,但是懒得写.今天来填个坑 莫队水题 莫队实际上就是按一个玄学顺序来离线计算询问,保证复杂度只会多一个n1/2,感觉是玄学(离线算法都很玄学) 易错点:要开long long(卡我半天 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7687 Solved: 3516[Subm ...
- NPY and girls-HDU5145莫队算法
Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description ...
- Codeforces617 E . XOR and Favorite Number(莫队算法)
XOR and Favorite Number time limit per test: 4 seconds memory limit per test: 256 megabytes input: s ...
- Bzoj 2038---[2009国家集训队]小Z的袜子(hose) 莫队算法
题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色 ...
随机推荐
- 在uboot里面添加环境变量使用run来执行
在uboot里面添加环境变量使用run来执行 本文链接:https://blog.csdn.net/u010979030/article/details/41038259 Author:杨正 Dat ...
- vue+iview的form表单校验总结
这篇文章时关于如何使用iview的form表单校验.主要学习如何使用form校验(以校验文字长度为例),以及如何动态添加校验规则和异步校验. 1.为需要校验的表单添加form标签 <!--注意: ...
- 数据结构与算法--递归(recursion)
递归的概念 简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁. 递归调用机制 我列举两个小案例,来帮助大家理解递归 1.打印问题 ...
- 2019最新Web前端经典面试试题(含答案)
1,阐述清楚浮动的几种方式(常见问题)(1)父级div定义 height原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题. 优点:简单.代码少.容易掌握 缺点:只适合高 ...
- ORACLE获取年初年末,月初月末,季度初季度末
转自:https://www.cnblogs.com/leqhome/p/5319984.html --年初,年末select trunc(sysdate,'yyyy') from dual;sele ...
- arm-none-eabi/bin/ld: build/com.zubax.gnss.elf section `.text' will not fit in region `flash'
出现如下错误: /arm-none-eabi/bin/ld: build/com.zubax.gnss.elf section `.text' will not fit in region `flas ...
- Vue指令之`v-text`和`v-html`
v-text: 没有加载闪烁问题,它会覆盖元素中原本的内容,但是插值表达式,只会替换自己的这个占位符,不会把 整个元素的内容清空. v-html: 使用v-html可以把标签元素也能显示在元素上 &l ...
- Android笔记 (二) Android的核心---Activity
什么是Activity Activity是Android应用程序核心组件中最基本的一个,是用户和程序交互的窗口,一个activity通常对应一个单独的视图,一个APP由一个或者多个activity构成 ...
- 初识Nginx,简单配置实现负载均衡(ubuntu + Nginx + tomcat)
工作需要,研究了一下Nginx的反向代理实现负载均衡,网上搜了一下教程,大多含糊不清,所以写下这个,权当总结,方便日后查看,如果能恰好帮到一些需要的人,那就更好了 先说需求,域名指向搭建了Nginx的 ...
- 每日一题-——LeetCode(46)全排列
题目描述: 给定一个没有重复数字的序列,返回其所有可能的全排列.输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ...