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的烦恼 莫队的更多相关文章

  1. 【luogu1797】faebdc的烦恼-莫队

    题目背景 鸟哥(faebdc)自从虐暴NOIP2013以来依然勤奋学习,每天上各种OJ刷题,各种比赛更是不在话下.但这天他遇到了一点小小的麻烦……在一届“Orz鸟哥杯”上,题目是在是太多了!足有n道! ...

  2. 普通莫队--洛谷P1997 【faebdc的烦恼】

    离散化+莫队 cnt数组表示某个颜色出现的次数 sum数组表示某个数量出现的颜色种类 其它细节问题就按照莫队的模板来的 #include<cstdio> #include<algor ...

  3. BZOJ 3289: Mato的文件管理[莫队算法 树状数组]

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 2399  Solved: 988[Submit][Status][Di ...

  4. NBUT 1457 莫队算法 离散化

    Sona Time Limit:5000MS     Memory Limit:65535KB     64bit IO Format: Submit Status Practice NBUT 145 ...

  5. 【填坑向】bzoj2038小Z的袜子 莫队

    学莫队必做题,,,但是懒得写.今天来填个坑 莫队水题 莫队实际上就是按一个玄学顺序来离线计算询问,保证复杂度只会多一个n1/2,感觉是玄学(离线算法都很玄学) 易错点:要开long long(卡我半天 ...

  6. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7687  Solved: 3516[Subm ...

  7. NPY and girls-HDU5145莫队算法

    Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description ...

  8. Codeforces617 E . XOR and Favorite Number(莫队算法)

    XOR and Favorite Number time limit per test: 4 seconds memory limit per test: 256 megabytes input: s ...

  9. Bzoj 2038---[2009国家集训队]小Z的袜子(hose) 莫队算法

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色 ...

随机推荐

  1. TZOJ5703: C++实验:学生成绩类的实现

    #include<iostream> #include<string> #include<stdio.h> using namespace std; class s ...

  2. Golang常用快捷键以及常见快捷键冲突

    配置快捷键: 跳转到函数定义 回退 查找函数使用 File/Settings/Keymap 工具: gofmt/golint File/Settings/Tools/File Watchers gol ...

  3. SPA项目首页导航+左侧菜单

    Mock.js是个啥 前后端分离之后,前端迫切需要一种机制,不再需要依赖后端接口开发,而今天的主角mockjs就可以做到这一点 Mock.js是一个模拟数据的生成器,用来帮助前端调试开发.进行前后端的 ...

  4. Android SDK版本号 与 API Level 对应关系 201911

    API是开发用的,所以API LEVEL可以认为是内部的:而SDK的版本提供了新特性给用户,是外部可见的. 可以查看以下网址以获取最新的对应关系:  http://developer.android. ...

  5. 浅学CLR via C#笔记之类型转换

    我们都知道CLR最重要的一个特性就是类型安全,它在运行时就知道对象类型. 但我们会经常用到将一种类型转换成另一种类型,CLR也允许将对象转成他的实际类型,或者是它的基类型. 在C#中,支持隐士转换成它 ...

  6. CentOS 6.x 配置iptables

    CentOS 6.x 配置iptables 来源 https://www.cnblogs.com/chillax1314/p/7976067.html iptables -P INPUT DROP-- ...

  7. php批量检测并去除BOM头的代码

    开发中会遇到BOM头, 导致程序无法执行. 浏览器返回接口如下图: 去除BOM头解决方法:<?phpini_set('memory_limit','1024M'); function check ...

  8. MySQL存储引擎的介绍

    数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建.查询.更新和删除数据操作.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎还可以获得特定的功能. ...

  9. jquery sortable的拖动方法示例详解1

    转自:https://www.jb51.net/article/45803.htm 所有的事件回调函数都有两个参数:event和ui,浏览器自有event对象,和经过封装的ui对象 ui.helper ...

  10. Nginx作为缓存服务

    缓存类型 (1) 服务器缓存 服务端缓存一般使用Memcache.Redis (2)代理缓存 (3)客户端缓存 代理缓存流程图 第一步:客户端第一次向Nginx请求数据a: 第二步:当Nginx发现缓 ...