博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
题解【luogu3709 大爷的字符串题】
阅读量:5290 次
发布时间:2019-06-14

本文共 1663 字,大约阅读时间需要 5 分钟。

Description

个人觉得这是这道题最难的一步...出题人的语文...

每次给出一个区间,求这个区间最少能被多少个单调上升的序列覆盖。

Solution

这个东西可以转化为这个区间中出现次数最多的数的出现次数(很好理解吧)

然后用莫队维护两个东西

  1. \(cnt_x\) 表示 \(x\) 的出现次数
  2. \(num_x\) 表示有多少个数出现次数是 \(x\)

用这两个东西可以方便地维护答案 ans。

加入 \(x\) 就是 num[cnt[x]]--; cnt[x]++; num[cnt[x]]++
删除 \(x\) 麻烦一些。
\(cnt_x = ans\) 并且 \(num_{cnt_x}=1\) ,那么 ans 要减 \(1\) (为什么 ans - 1 合法呢?因为删除之后这个数的出现次数就是 ans - 1)
如果不满足上面的这个条件,那么 ans 就不会有变化。最后记得 num[cnt[x]]--; cnt[x]--; num[cnt[x]]++

Code

#include 
using namespace std;const int N = 200200; int n, m, cnt[N], num[N], blo, A[N], a[N], ans, aans[N]; struct node { int l, r, id; inline bool operator < (const node &x) const { return l / blo == x.l / blo ? r < x.r : l / blo < x.l / blo; }} Q[N]; inline void add(int x) { num[cnt[a[x]]]--; num[++cnt[a[x]]]++; ans = max(ans, cnt[a[x]]); }inline void del(int x) { if(cnt[a[x]] == ans && num[cnt[a[x]]] == 1) ans--; num[cnt[a[x]]]--; num[--cnt[a[x]]]++; }int main() { scanf("%d %d", &n, &m); blo = sqrt(m); int nn = n; for(int i = 1; i <= n; i++) scanf("%d", &A[i]), a[i] = A[i]; sort(A + 1, A + n + 1); n = unique(A + 1, A + n + 1) - A - 1; for(int i = 1; i <= nn; i++) a[i] = lower_bound(A + 1, A + n + 1, a[i]) - A; for(int i = 1; i <= m; i++) { scanf("%d %d", &Q[i].l, &Q[i].r); Q[i].id = i; } sort(Q + 1, Q + m + 1); int L = 0, R = 0; for(int i = 1; i <= m; i++) { int l = Q[i].l, r = Q[i].r; while(L > l) add(--L); while(R < r) add(++R); while(L < l) del(L++); while(R > r) del(R--); aans[Q[i].id] = -ans; } for(int i = 1; i <= m; i++) printf("%d\n", aans[i]); return 0; }

转载于:https://www.cnblogs.com/acfunction/p/10161607.html

你可能感兴趣的文章
黑盒测试和百合测试的优缺点对比
查看>>
SecureCRT的使用方法和技巧(详细使用教程)
查看>>
装饰者模式
查看>>
C++二进制文件中读写bitset
查看>>
右侧导航栏(动态添加数据到list)
查看>>
用Nginx+Lua(OpenResty)开发高性能Web应用
查看>>
virtualbox不能安装64位操作系统
查看>>
gulp 入门---使用gulp压缩JS
查看>>
81、iOS本地推送与远程推送详解
查看>>
Sharepoint online 如何使用asp.net开发项目!!!
查看>>
C#基础_注释和VS常用快捷键(一)
查看>>
http协议
查看>>
为什么CPU时钟频率在过去5年里没有增加?
查看>>
动态调用webservice
查看>>
2017-05-18
查看>>
移动端压缩并ajax上传图片解决方案
查看>>
python带header
查看>>
如何用listview显示服务端数据
查看>>
paip.输入法英文词库的处理 python 代码 o4
查看>>
atitit agt sys 设置下级代理功能设计.docx
查看>>