题目传送门

不用管它随机什么的,就用贪心的思想去想,

会发现这道题的实质是:求查询区间众数出现次数。

莫队即可解决。

注意字符集1e9,要离散化处理。

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define re register
  6. #define rep(i, a, b) for (re int i = a; i <= b; ++i)
  7. #define repd(i, a, b) for (re int i = a; i >= b; --i)
  8. #define maxx(a, b) a = max(a, b);
  9. #define minn(a, b) a = min(a, b);
  10. #define LL long long
  11. #define INF (1 << 30)
  12.  
  13. inline int read() {
  14. int w = , f = ; char c = getchar();
  15. while (!isdigit(c)) f = c == '-' ? - : f, c = getchar();
  16. while (isdigit(c)) w = (w << ) + (w << ) + (c ^ ''), c = getchar();
  17. return w * f;
  18. }
  19.  
  20. const int maxn = 2e5 + ;
  21.  
  22. struct Query {
  23. int l, r, id, pos;
  24. } q[maxn];
  25. bool cmp(Query a, Query b) { return a.pos < b.pos || a.pos == b.pos && a.r < b.r; }
  26.  
  27. struct Value {
  28. int v, id;
  29. } v[maxn];
  30. bool cmpv(Value a, Value b) { return a.v < b.v; }
  31.  
  32. int a[maxn], b[maxn], l[maxn], cnt[maxn], n, m, size;
  33.  
  34. int main() {
  35. n = read(), m = read();
  36. size = sqrt(n);
  37. rep(i, , n) v[i].v = read(), v[i].id = i;
  38. sort(v+, v+n+, cmpv);
  39. a[v[].id] = ;
  40. rep(i, , n) a[v[i].id] = a[v[i-].id] + (v[i].v == v[i-].v ? : );
  41.  
  42. rep(i, , m) q[i].l = read(), q[i].r = read(), q[i].id = i, q[i].pos = (q[i].l + size - ) / size;
  43. sort(q+, q+m+, cmp);
  44. int pl = , pr = , ans = ; l[] = maxn;
  45. rep(i, , m) {
  46. while (pl < q[i].l) l[cnt[a[pl]]]--, l[cnt[a[pl]]-]++, cnt[a[pl++]]--;
  47. while (pl > q[i].l) cnt[a[--pl]]++, l[cnt[a[pl]]]++, l[cnt[a[pl]]-]--, maxx(ans, cnt[a[pl]]);
  48. while (pr < q[i].r) cnt[a[++pr]]++, l[cnt[a[pr]]]++, l[cnt[a[pr]]-]--, maxx(ans, cnt[a[pr]]);
  49. while (pr > q[i].r) l[cnt[a[pr]]]--, l[cnt[a[pr]]-]++, cnt[a[pr--]]--;
  50. while (!l[ans]) ans--;
  51. b[q[i].id] = ans;
  52. }
  53. rep(i, , m) printf("%d\n", -b[i]);
  54. return ;
  55. }

[洛谷P3709]大爷的字符串题的更多相关文章

  1. 洛谷 P3709 大爷的字符串题

    https://www.luogu.org/problem/show?pid=3709 题目背景 在那遥远的西南有一所学校 /*被和谐部分*/ 然后去参加该省省选虐场 然后某蒟蒻不会做,所以也出了一个 ...

  2. 洛谷P3709 大爷的字符串题(莫队)

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

  3. 【题解】洛谷P3709大爷的字符串题

    最近想要练习一下莫队(实在是掌握的太不熟练了啊.)这题一开始看到有点懵(题面杀),后来发现是要求众数的个数.乍一看好像很难的样子. 但仔细分析一下:首先往序列当中加入一个数,这个是很简单的,只需要维护 ...

  4. 洛谷P3709 大爷的字符串

    题意:多次求区间众数的出现次数. 解: 这题居然可以莫队...... 首先开个桶.然后还要开个数组,cnt[i]表示出现i次的数有多少个. 然后就可以O(1)修改了. #include <cst ...

  5. P3709 大爷的字符串题 (莫队)

    题目 P3709 大爷的字符串题 题意:求\([l,r]\)中众数的个数. 解析 维护两个数组: \(cnt[x]\),数\(x\)出现的次数. \(sum[x]\),出现次数为\(x\)的数的个数. ...

  6. P3709 大爷的字符串题(莫队+结论)

    题目 P3709 大爷的字符串题 做法 有一个显然的结论:一段区间里最小答案为众数的个数 用莫队来离线求众数 \(tmp_i\)表示出现\(i\)次的数的个数,\(num_i\)表示\(i\)出现的次 ...

  7. luogu P3709 大爷的字符串题

    二次联通门 : luogu P3709 大爷的字符串题 /* luogu P3709 大爷的字符串题 莫队 看了半天题目 + 题解 才弄懂了要求什么... 维护两个数组 一个记录数字i出现了几次 一个 ...

  8. P3709 大爷的字符串题(50分)

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

  9. P3709 大爷的字符串题

    题意 询问区间众数出现的次数 思路 唯有水题快人心 离散化+莫队 莫队一定要先加后减,有事会出错的 莫队维护区间众数: 维护两个数组,一个数组记录权值为x的出现次数,一个记录出现次数为x的数的个数 a ...

随机推荐

  1. Hbase入门(一)——初识Hbase

    本文将介绍大数据的知识和Hbase的基本概念,作为大数据体系中重要的一员,Hbase弥补了Hadoop只能离线批处理的不足,支持存储小文件,随机检索.而这种特性使得Hbase对于实时计算体系的事件存储 ...

  2. Micrometer 快速入门

    Micrometer为最流行的监控系统提供了一个简单的仪表客户端外观,允许仪表化JVM应用,而无需关心是哪个供应商提供的指标.它的作用和SLF4J类似,只不过它关注的不是Logging(日志),而是a ...

  3. [VB.NET Tips]程序的启动和终止

    当执行一个VB.NET应用程序时,CLR会把IL翻译成x86指令,并且寻找一个名为Main的方法. 并从该方法开始执行程序.Main方法也称为程序的"入口"(entry point ...

  4. Vue学习之vue中的v-if,v-show,v-for

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Java面试-interrupt

    我们都知道,Java中停止一个线程不能用stop,因为stop会瞬间强行停止一个线程,且该线程持有的锁并不能释放.大家多习惯于用interrupt,那么使用它又有什么需要注意的呢? interrupt ...

  6. Python 之父的解析器系列之七:PEG 解析器的元语法

    原题 | A Meta-Grammar for PEG Parsers 作者 | Guido van Rossum(Python之父) 译者 | 豌豆花下猫("Python猫"公众 ...

  7. Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value:

    问题:ERROR JDBCExceptionReporter:72 - Data truncation: Incorrect datetime value: '' for column 'create ...

  8. Java利用反射排序

    前言 Java为我们提供了几种排序得方法,比如Arrays和Collections类,但是前提是数组或者集合中的元素都必须实现Comparable接口,基本的数据类型都已经实现了Comparable接 ...

  9. Shell之文本排序命令

    目录 Shell之文本排序命令 参考 wc命令 sort命令 uniq命令 Shell之文本排序命令

  10. Java文件操作——File

    创建File isFile().length().exists().createNewFile(). File.separator / isDirtory(). mkdir().mkdirs(). d ...