D. Cut and Stick

给定一个长度为nnn的数组,里面元素为a1,a2,a3,…,an−1,an,(1≤ai≤n)a_1, a_2, a_3, \dots, a_{n- 1}, a_n, (1 \leq a_i \leq n)a1​,a2​,a3​,…,an−1​,an​,(1≤ai​≤n),有mmm次询问,每次给定l,rl, rl,r,

问如果把[l,r][l, r][l,r]划分若干段子序列,假设其中一段长度为lenlenlen,里面出现最多次的元素次数≤⌈len2⌉\leq \lceil \frac{len}{2} \rceil≤⌈2len​⌉,对所有段都满足,

不考虑划分成一段的情况,那么我们就是要尽可能地把最大地给划开,最优的策略是两个最大的跟一个其他的一起划分,

假设区间长度为r−l+1=lenr - l + 1 = lenr−l+1=len,最大的元素个数为xxx,则还有len−xlen - xlen−x个其他元素,

由于其他元素都是小于⌈len2⌉\lceil \frac{len}{2} \rceil⌈2len​⌉的,所以,我们让两个最大元素与其他元素配对时,可以保证剩下的元素中最大个数不会超过xxx的值,

假设我们要配对kkk个,则当满足,x−2k+len−x−k+1≥2x−4kx - 2k + len - x - k + 1 \geq 2x - 4kx−2k+len−x−k+1≥2x−4k时只需要一个序列即可,解得k=2x−len−1k = 2x - len - 1k=2x−len−1,

所以最后答案为max(2x−len,1)max(2x - len, 1)max(2x−len,1),所以我们只要统计区间数量最多的值即可,可用莫队解决。

#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 10;int a[N], ans[N], sum[N], num[N], n, m, block, maxn;struct Res {int l, r, id;
}query[N];bool cmp(Res x, Res y) {return ((x.l / block) != (y.l / block)) ? x.l < y.l : ((x.l / block) & 1) ? x.r < y.r : x.r > y.r;
}void add(int x) {num[a[x]]++;sum[num[a[x]]]++;while (sum[maxn + 1]) {maxn++;}
}void del(int x) {sum[num[a[x]]]--;num[a[x]]--;while (maxn && !sum[maxn]) {maxn--;}
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);scanf("%d %d", &n, &m);for (int i = 1; i <= n; i++) {scanf("%d", &a[i]);}block = sqrt(n);for (int i = 1, l, r; i <= m; i++) {scanf("%d %d", &l, &r);query[i] = {l, r, i};}sort(query + 1, query + 1 + m, cmp);int l = 1, r = 0;for (int i = 1; i <= m; i++) {while (r < query[i].r) {add(++r);}while (l < query[i].l) {del(l++);}while (r > query[i].r) {del(r--);}while (l > query[i].l) {add(--l);}ans[query[i].id] = max(1, 2 * maxn - (query[i].r - query[i].l + 1));}for (int i = 1; i <= m; i++) {printf("%d\n", ans[i]);}return 0;
}

D. Cut and Stick(Codeforces Round #716 (Div. 2))相关推荐

  1. 【莫队】区间众数(Codeforces Round #716 (Div. 2) D)

    D. Cut and Stick (赛后补题)借本题学习莫队算法以及区间众数的求法 题意:对于整型数组,每次询问[L,R][L,R][L,R]区间问最少分为多少个子序列,使得每个子序列的众数xxx的个 ...

  2. F. Bouncy Ball(Codeforces Round 859 (Div. 4))

    题目链接:Problem - F - Codeforceshttps://codeforces.com/contest/1807/problem/F 题意:给你一个n*m大小的网格,再给你一个起始点和 ...

  3. D. Boboniu Chats with Du(Codeforces Round #664 (Div. 2) )

    感受 怎么这么傻逼的题目,我现场A不了呢?看来还有不少提升的空间怎么这么傻逼的题目,我现场A不了呢?看来还有不少提升的空间怎么这么傻逼的题目,我现场A不了呢?看来还有不少提升的空间 题意 简单来说,给 ...

  4. F. Strange Array(Codeforces Round #727 (Div. 2))(主席树)

    F. Strange Array 给定一个长度为nnn的数组aaa,1≤ai≤n1 \leq a_i \leq n1≤ai​≤n,对于每个aia_iai​,我们要找到一个l≤i,r≥il \leq i ...

  5. E. Company(Codeforces Round #520 (Div. 2))

    E. Company 给定一颗有nnn个节点的树,有mmm次询问,每次询问给定[l,r][l, r][l,r],我们可以选择删除其中的一个点ppp,然后找到一个深度最深的rtrtrt,使得剩下的点都在 ...

  6. A Perfectly Balanced String?(Codeforces Round #785 (Div. 2))

    A Perfectly Balanced String? Let's call a string s perfectly balanced if for all possible triplets ( ...

  7. Codeforces Round #716 (Div. 2) D. Cut and Stick 主席树 + 思维

    传送门 文章目录 题意: 思路: 题意: 给你个长为nnn的数组aaa,定义好的区间为这个区间中每个数出现的次数≤⌈n2⌉\le \left \lceil \frac{n}{2} \right \rc ...

  8. Codeforces Round #716 (Div. 2) D(随机算法)

    Codeforces Round #716 (Div. 2) D 题意:区间查询,问区间最少能分成几部分使得最多的数不超过总数的一半 向上取整. 思路:找到区间的总数s,如果不超过一半的话就是一部分. ...

  9. Codeforces Round #716 (Div. 2)

    Codeforces Round #716 (Div. 2) CodeForces 1514 题号 题目 知识点 难度 A Perfectly Imperfect Array B AND 0, Sum ...

最新文章

  1. 深度学习目标检测(object detection)系列(一) R-CNN
  2. vue 页面闪烁的问题_vue页面加载闪烁问题的解决方法
  3. Qt Creator查找和更换
  4. 大数据学习规划(新手入门)
  5. git bash命令_更优雅地使用命令行
  6. Java文件下载/下载文件的案例
  7. step7db块寻址_step7中的难点:间接寻址示例,中文详细注释。
  8. SpringBoot 整合Redis报错:NoClassDefFoundError: redis/clients/util/SafeEncoder
  9. oracle表空间查询维护命令大全之二(undo表空间)
  10. 泛型的继承和通配符,同时归纳集合部分的面试点
  11. 云主机是什么,怎么才能购买性价比高的云主机
  12. 【PDF】java使用Itext生成pdf文档--详解
  13. 旋转卡壳算法(转载)
  14. Svn主分支次分支合并和版本回退
  15. Elementui el-select创建条目的多选下拉框 自定义校验 新增条目时字符长度限制
  16. Qt编写的项目作品11-带频谱的音乐播放器
  17. 戴老师论文阅读:Two-Timescale Channel Estimation for Reconfigurable Intelligent Surface Aided Wireless...
  18. WebView:Google,我已经长大了,知道自己区分安全!!
  19. Comcast:美国电视行业变革分析,在线直播市场前景巨大
  20. 怎么科学开奶,堵奶怎么办?

热门文章

  1. nginx 修改配置文件使之支持pathinfo,且隐藏index.php
  2. 假期别在家里要发霉了?可以靠他们度过无聊时光
  3. 成年人改变生活的方式,都是从它开始
  4. 鸿蒙思维和小央美,北市场附近艺术培训
  5. 微信 小程序 python 渲染_微信小程序渲染html内容
  6. php curl https 443,PHP CURL支持HTTP、HTTPS 请求亲测可用
  7. java 写入环境变量_Java环境变量配置 - import_key的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. jdbc连接mysql的语法_JDBC连接MySQL
  9. android 带弧形背景,[Android日常]绘制弧形渐变背景
  10. 使有用计算机不注意卫生,保护眼睛注意细节有哪些