传送门
给定一个长度为NNN的数组,求区间l∼rl \sim rl∼r任意排序后,最小严格递增序列的个数(=区间众数)

分析

就是求l∼rl \sim rl∼r 区间的众数,离线,不修改
考虑莫队
增加一个数,计数器删除原来次数的出现次数,更新现在的次数,更新答案
删除一个属,计数器更新原来的出现次数,跟新现在的次数,再跟新答案

void add(int x) {--same[cnt[arr[x]]];++same[++cnt[arr[x]]];mo = max(mo, cnt[arr[x]]);
}void del(int x) {--same[cnt[arr[x]]];++same[--cnt[arr[x]]];while (!same[mo]&&mo) -- mo;
}

cntcntcnt 记录的是,出现个数
samesamesame 记录的是,(出现个数的值)的数量

代码

//P3709
/*@Author: YooQ
*/
#include <bits/stdc++.h>
using namespace std;
#define sc scanf
#define pr printf
#define ll long long
#define int long long
#define FILE_OUT freopen("out", "w", stdout);
#define FILE_IN freopen("in", "r", stdin);
#define debug(x) cout << #x << ": " << x << "\n";
#define AC 0
#define WA 1
#define INF 0x3f3f3f3f
const ll MAX_N = 1e6+5;
const ll MOD = 1e9+7;
int N, M, K;int arr[MAX_N];
int uniarr[MAX_N];
int unicnt = 0;
int block = 1;int idb(int x) {return x / block;
}struct Qr {int l, r, id;bool operator < (const Qr& B) const {return idb(l) ^ idb(B.l) ? l < B.l : (idb(l)&1) ? r < B.r : r > B.r;}
}qr[MAX_N];int cnt[MAX_N];
int same[MAX_N];int mo = 0;void add(int x) {--same[cnt[arr[x]]];++same[++cnt[arr[x]]];mo = max(mo, cnt[arr[x]]);
}void del(int x) {--same[cnt[arr[x]]];++same[--cnt[arr[x]]];while (!same[mo]&&mo) -- mo;
}int ans[MAX_N];void solve(){sc("%lld%lld", &N, &M);block = max(sqrt(N), sqrt((N*N)/M));for (int i = 1; i <= N; ++i) {sc("%lld", &arr[i]);uniarr[i] = arr[i];}unicnt = N;int l, r;for (int i = 1; i <= M; ++i) {sc("%lld%lld", &l, &r);qr[i] = {l, r, i};}sort(qr+1, qr+1+M);sort(uniarr+1, uniarr+1+unicnt);unicnt = unique(uniarr+1, uniarr+1+unicnt) - uniarr - 1;for (int i = 1; i <= N; ++i) {arr[i] = lower_bound(uniarr+1, uniarr+1+unicnt, arr[i]) - uniarr;}l = 1, r = 0;for (int i = 1; i <= M; ++i) {while (l > qr[i].l) add(--l);while (r < qr[i].r) add(++r);while (l < qr[i].l) del(l++);while (r > qr[i].r) del(r--);ans[qr[i].id] = mo;}for (int i = 1; i <= M; ++i) {pr("%lld\n", -ans[i]);}
}signed main()
{#ifndef ONLINE_JUDGE//FILE_INFILE_OUT#endifint T = 1;//cin >> T;while (T--) solve();return AC;
}

P3709 大爷的字符串题【普通莫队】相关推荐

  1. P3709 大爷的字符串题(莫队+离散)

    大爷的字符串题 题目背景 在那遥远的西南有一所学校, /*被和谐部分*/ 然后去参加该省省选虐场, 然后某蒟蒻不会做,所以也出了一个字符串题: 题目描述 给你一个字符串 a a a,每次询问一段区间的 ...

  2. 数据结构题(莫队算法)

    数据结构题 题目: 问在区间[l,r]和[l1,r1]内x的出现次数的乘积是多少? 题解: 莫队算法的模板题 关于莫队算法你可以参考这个 我这里简单的说说我对莫队的理解: 莫队是一个优雅的暴力,就是将 ...

  3. 莫队算法(普通莫队、带修莫队、树上莫队、不删除莫队)学习笔记【理解+套路/核心代码+例题及题解】

    一.理解 我的理解就是巧妙的暴力,利用双指针以及分块思想,巧妙的移动双指针,时间复杂度可以达到O(NlogN). 强推博客:写的又好又全.链接 二.套路 1.普通莫队 [1]核心代码 bool cmp ...

  4. BZOJ 2038: [2009国家集训队]小Z的袜子(莫队算法例题)

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只 ...

  5. 洛谷 - P3246 [HNOI2016]序列(莫队+单调栈)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,再给出 mmm 次询问,每次询问需要回答一个区间 [l,r][l,r][l,r] 内所有子区间的最小值之和 题目分析:因为可以离线,所以考 ...

  6. HDU 4417 Super Mario(莫队 + 树状数组 + 离散化)

    Super Mario 思路 区间查找问题,容易想到离线莫队,确实这题就是莫队,接下来我们考虑如何维护区间高度值问题. 既然是离线嘛,我们容易想到离散化和他挂钩,想想这题是否需要离散化,高度的最大值是 ...

  7. SPOJ DQUERY - D-query (莫队算法)

    Given a sequence of n numbers a1, a2, ..., an and a number of d-queries. A d-query is a pair (i, j) ...

  8. 牛客网暑期ACM多校训练营(第一场) J (莫队算法)

    题目链接:https://www.nowcoder.com/acm/contest/139/J 题目大意:给一个序列,进行q次查询,问1~l和r~n中有多少个不同的数字 题目思路:之前只是听说过莫队算 ...

  9. 牛客练习赛85 数学家的迷题 (带修莫队/线段树)

    题意: 1:将a[id]a[id]a[id]的值改为xxx. 2:令t=a[l]×a[l+1]×...×a[r−1]×a[r]t=a[l]×a[l+1]×...×a[r−1]×a[r]t=a[l]×a ...

最新文章

  1. kwargs.pop是什么意思
  2. js 加alert后才能执行方法
  3. 就业模拟试题_Net(答案)
  4. 【Spring MVC 中 HandlerInterceptorAdapter的使用】
  5. 仿微信朋友圈项目梳理
  6. 转换实体类_利用Java反射机制进行Map和JavaBean间转换
  7. 不可变集合相比可变集合_简单的基准测试:不可变集合VS持久集合
  8. 05 MapReduce应用案例01
  9. 每个时代都有每个时代的风口
  10. hihocoder第220周-一道拧巴的题
  11. 类型与通用语言运行时:System.Object
  12. python中update是啥意思_python中update的基本使用方法详解
  13. python如何跳出函数_python如何跳出函数
  14. html网页主页制作,网页主页制作过程
  15. pr录制自己声音杂音很重
  16. Python测试题(绘制柱状图、画出sin函数图像、散点图、pandas实现列表)
  17. 财物机器人英文ppt演讲课件_英语演讲练习PPT-机器人发展史(机械工程)ppt
  18. 英特尔固态硬盘测试软件,AS SSD测试:IOPS值高达11万_Intel 520_固态硬盘评测-中关村在线...
  19. 电力系统机组组合优化调度(IEEE14节点、IEEE30节点、IEEE118节点)(Matlab代码实现)
  20. python引用自己写的文件

热门文章

  1. 制作64M启动型+系统维护U盘,支持WINPE+CDLinux+DOS7
  2. 为什么要学习 Python?这是我听过最实用的答案
  3. Windows-EmEditor emed_v1910 超大文本编辑器
  4. 【C语言进阶剖析】14.C语言中的单引号和双引号
  5. 2022 虎符 pwn mva
  6. matlab 膨胀 结构元,图像形态学膨胀 结构元素
  7. Educational Codeforces Round 132 div.2 A-F题解
  8. 16进制 dat matlab_用MATLAB生成DAT文件
  9. 小程序滚动事件相关总结
  10. 软件学院蓝桥杯选拔赛