P3709 大爷的字符串题

题意

离线求区间众数出现的次数,卡空间,莫队。

解法

  • 莫队
  • 怎么在 O(1)O(1)O(1) 进行答案的转移呢?
  • 我们可以维护一个 cnt[i]cnt[i]cnt[i] 数组,表示数字 iii 在区间内出现的次数(先离散化),由于每次 cntcntcnt 数组只会变化 111 ,我们需要维护 cnt[i]cnt[i]cnt[i] 的最大值,就可以维护一个 num[i]num[i]num[i] 表示有多少个数在区间内恰好出现 iii 次。这样答案就可以 O(1)O(1)O(1) 转移了。

代码

#pragma region
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
using namespace std;
typedef long long ll;
#define rep(i, a, n) for (int i = a; i <= n; ++i)
#define per(i, a, n) for (int i = n; i >= a; --i)
namespace fastIO {#define BUF_SIZE 100000
#define OUT_SIZE 100000
//fread->R
bool IOerror = 0;
//inline char nc(){char ch=getchar();if(ch==-1)IOerror=1;return ch;}
inline char nc() {static char buf[BUF_SIZE], *p1 = buf + BUF_SIZE, *pend = buf + BUF_SIZE;if (p1 == pend) {p1 = buf;pend = buf + fread(buf, 1, BUF_SIZE, stdin);if (pend == p1) {IOerror = 1;return -1;}}return *p1++;
}
inline bool blank(char ch) { return ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t'; }
template <class T>
inline bool R(T &x) {bool sign = 0;char ch = nc();x = 0;for (; blank(ch); ch = nc());if (IOerror)return false;if (ch == '-')sign = 1, ch = nc();for (; ch >= '0' && ch <= '9'; ch = nc())x = x * 10 + ch - '0';if (sign)x = -x;return true;
}
inline bool R(double &x) {bool sign = 0;char ch = nc();x = 0;for (; blank(ch); ch = nc());if (IOerror)return false;if (ch == '-')sign = 1, ch = nc();for (; ch >= '0' && ch <= '9'; ch = nc())x = x * 10 + ch - '0';if (ch == '.') {double tmp = 1;ch = nc();for (; ch >= '0' && ch <= '9'; ch = nc())tmp /= 10.0, x += tmp * (ch - '0');}if (sign)x = -x;return true;
}
inline bool R(char *s) {char ch = nc();for (; blank(ch); ch = nc());if (IOerror)return false;for (; !blank(ch) && !IOerror; ch = nc())*s++ = ch;*s = 0;return true;
}
inline bool R(char &c) {c = nc();if (IOerror) {c = -1;return false;}return true;
}
template <class T, class... U>
bool R(T &h, U &... tmp) { return R(h) && R(tmp...); }
#undef OUT_SIZE
#undef BUF_SIZE
};  // namespace fastIO
using namespace fastIO;
template <class T>
void _W(const T &x) { cout << x; }
void _W(const int &x) { printf("%d", x); }
void _W(const int64_t &x) { printf("%lld", x); }
void _W(const double &x) { printf("%.16f", x); }
void _W(const char &x) { putchar(x); }
void _W(const char *x) { printf("%s", x); }
template <class T, class U>
void _W(const pair<T, U> &x) { _W(x.F), putchar(' '), _W(x.S); }
template <class T>
void _W(const vector<T> &x) {for (auto i = x.begin(); i != x.end(); _W(*i++))if (i != x.cbegin()) putchar(' ');
}
void W() {}
template <class T, class... U>
void W(const T &head, const U &... tail) { _W(head), putchar(sizeof...(tail) ? ' ' : '\n'), W(tail...); }
#pragma endregion
//洛谷P3709 大爷的字符串题
const int maxn = 4e5 + 5;
int n, Q, B;
int a[maxn], b[maxn];
int pos[maxn];
struct node {int l, r, id;bool operator<(const node &A) const { return pos[l] == pos[A.l] ? r < A.r : pos[l] < pos[A.l]; }
} q[maxn];
int ans = 0, ANS[maxn];
int cnt[maxn], num[maxn];
void update(int id, int f) {int x = a[id];if (f == 1) {--num[cnt[x]];++cnt[x];if (cnt[x] > ans) ++ans;++num[cnt[x]];} else {--num[cnt[x]];--cnt[x];if (cnt[x] + 1 == ans && num[ans] == 0) --ans;++num[cnt[x]];}
}
int main() {R(n, Q);B = sqrt(n);rep(i, 1, n) R(a[i]), pos[i] = i / B;memcpy(b, a, sizeof(a));sort(b + 1, b + 1 + n);rep(i, 1, n) a[i] = lower_bound(b + 1, b + 1 + n, a[i]) - b;  //b[a[i]]rep(i, 1, Q) R(q[i].l, q[i].r), q[i].id = i;sort(q + 1, q + 1 + Q);int l = 1, r = 0;rep(i, 1, Q) {while (l < q[i].l) update(l++, -1);while (l > q[i].l) update(--l, 1);while (r < q[i].r) update(++r, 1);while (r > q[i].r) update(r--, -1);ANS[q[i].id] = ans;}rep(i, 1, Q) W(-ANS[i]);
}

洛谷P3709 大爷的字符串题 莫队相关推荐

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

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

  2. P3709 大爷的字符串题【普通莫队】

    传送门 给定一个长度为NNN的数组,求区间l∼rl \sim rl∼r任意排序后,最小严格递增序列的个数(=区间众数) 分析 就是求l∼rl \sim rl∼r 区间的众数,离线,不修改 考虑莫队 增 ...

  3. 洛谷-小清新人渣的本愿-(莫队+bitset)

    小清新人渣的本愿 题意: 就是给你一个数组,然后有3种查询,分别是问你l到r区间内,是否有两个数的差等于x,只和等于x,乘积为x. 思考: 其实看到,感觉就挺复杂的,没办法去找这种关系对,除了乘积为x ...

  4. 洛谷1072 Hankson 的趣味题

    https://www.luogu.org/problem/show?pid=1072 Hankson 的趣味题 正解:素数筛+因数分解+乘法原理.简单地来说就是我不会! 但是考虑: 1.从b1入手, ...

  5. 洛谷P1852 奇怪的字符串

    题目描述 输入两个01串,输出它们的最长公共子序列的长度 输入输出格式 输入格式: 一行,两个01串 输出格式: 最长公共子序列的长度 输入输出样例 输入样例#1: 复制 01010101010 00 ...

  6. 洛谷 - P4173 残缺的字符串(多项式匹配字符串-NTT)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串 sss 和一个长度为 mmm 的字符串 ttt,都含有通配符 '*',现在问字符串 ttt 可以匹配字符串 nnn 的哪些位置 题目分析 ...

  7. mdltxdy mjj的英语单词(4.2洛谷比赛中的字符串问题)

    enmmmm我的字符串是真的凉啊orz,导致我到现在都怀疑那位负责出题的mjj是不是故意在卡我QAQ 好啦话不多说,上题 1,mdltxdy(字符串替换问题) 题意描述: mdl每天都在小分队里面被刷 ...

  8. 洛谷P3952 时间复杂度【字符串】【模拟】

    题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序 ...

  9. 洛谷 P1852 奇怪的字符串

    P1852 奇怪的字符串 题目描述 输入两个01串,输出它们的最长公共子序列的长度 输入输出格式 输入格式: 一行,两个01串 输出格式: 最长公共子序列的长度 输入输出样例 输入样例#1: 复制 0 ...

  10. 【OJ】洛谷函数与结构体题单题解锦集

    题单简介 题目解析 P5735 距离函数 P5736 质数筛 P5737 闰年展示 P5738 歌唱比赛 P5739 计算阶乘 P5461 赦免战俘 P5740 最厉害的学生 P5741 旗鼓相当的对 ...

最新文章

  1. 设置Django关闭Debug后的静态文件路由
  2. 用API获得Internet Explorer_Server类的HTML
  3. mysql将备份的数据导入_成功将MySQL的大型数据导入导出和备份(转载)
  4. RGBD论文阅读笔记
  5. 如何用xshell上宝塔
  6. html网页效果分析,熟手的html编写风格与原因分析_HTML/Xhtml_网页制作
  7. html和vue的区别,2018-09-16第四课 (v-html和v-text的区别,v-once和v-pre的区别,vue的生命周期,选项卡)...
  8. 将两个DataTable合并成一个DataTable
  9. oracle禁止访问监听,关于ORACLE数据库监听自动停止解决一例
  10. 单片机74LS164C语言例子,74ls164单片机编程汇总(跑马灯/驱动数码管)
  11. WPF StatusBar控件
  12. Piranha介绍:过期代码自动删除的开源工具
  13. 使用SpringMVC框架实现员工管理系统
  14. [源码和文档分享]基于8253、8255芯片汇编实现简易电子琴
  15. ASAM XCP及驱动代码、ISO 11898+CANFD,ISO 14229,ISO 15031,ISO 15765相关标准文档
  16. Java基础入门必须学好的英语词汇
  17. java中如果int类型超出了它的范围
  18. Apache运行正常,但是localhost却打不开页面
  19. python 批量下载财务数据_Python+Wind 批量下载上市公司年报 - Part 1/2
  20. 工作N年的开发者更该写博客 —— 记参加CSDN开发者生态汇

热门文章

  1. 廊坊-北京,一月期满,回顾、感恩、奋进。。。
  2. 如何快捷修改eclipse黑色背景和字体颜色设置?
  3. Python用户画像词云图生成并集成到django网站
  4. QC1.0、QC2.0、QC3.0、QC4.0协议介绍
  5. torch.optim.Optimizer
  6. Python修改证件照底色,get新技能
  7. 【爬虫】使用Scrapy框架进行爬虫详解及示例
  8. “大数据杀熟”手段变种需要警惕!
  9. 土方回填施工方案范本_土方回填施工方案范本
  10. word2010 二级标题不跟随一级标题编号