D. Cut and Stick(Codeforces Round #716 (Div. 2))
D. Cut and Stick
不考虑划分成一段的情况,那么我们就是要尽可能地把最大地给划开,最优的策略是两个最大的跟一个其他的一起划分,
假设区间长度为r−l+1=lenr - l + 1 = lenr−l+1=len,最大的元素个数为xxx,则还有len−xlen - xlen−x个其他元素,
由于其他元素都是小于⌈len2⌉\lceil \frac{len}{2} \rceil⌈2len⌉的,所以,我们让两个最大元素与其他元素配对时,可以保证剩下的元素中最大个数不会超过xxx的值,
所以最后答案为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))相关推荐
- 【莫队】区间众数(Codeforces Round #716 (Div. 2) D)
D. Cut and Stick (赛后补题)借本题学习莫队算法以及区间众数的求法 题意:对于整型数组,每次询问[L,R][L,R][L,R]区间问最少分为多少个子序列,使得每个子序列的众数xxx的个 ...
- F. Bouncy Ball(Codeforces Round 859 (Div. 4))
题目链接:Problem - F - Codeforceshttps://codeforces.com/contest/1807/problem/F 题意:给你一个n*m大小的网格,再给你一个起始点和 ...
- D. Boboniu Chats with Du(Codeforces Round #664 (Div. 2) )
感受 怎么这么傻逼的题目,我现场A不了呢?看来还有不少提升的空间怎么这么傻逼的题目,我现场A不了呢?看来还有不少提升的空间怎么这么傻逼的题目,我现场A不了呢?看来还有不少提升的空间 题意 简单来说,给 ...
- 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 ...
- E. Company(Codeforces Round #520 (Div. 2))
E. Company 给定一颗有nnn个节点的树,有mmm次询问,每次询问给定[l,r][l, r][l,r],我们可以选择删除其中的一个点ppp,然后找到一个深度最深的rtrtrt,使得剩下的点都在 ...
- 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 ( ...
- Codeforces Round #716 (Div. 2) D. Cut and Stick 主席树 + 思维
传送门 文章目录 题意: 思路: 题意: 给你个长为nnn的数组aaa,定义好的区间为这个区间中每个数出现的次数≤⌈n2⌉\le \left \lceil \frac{n}{2} \right \rc ...
- Codeforces Round #716 (Div. 2) D(随机算法)
Codeforces Round #716 (Div. 2) D 题意:区间查询,问区间最少能分成几部分使得最多的数不超过总数的一半 向上取整. 思路:找到区间的总数s,如果不超过一半的话就是一部分. ...
- Codeforces Round #716 (Div. 2)
Codeforces Round #716 (Div. 2) CodeForces 1514 题号 题目 知识点 难度 A Perfectly Imperfect Array B AND 0, Sum ...
最新文章
- 深度学习目标检测(object detection)系列(一) R-CNN
- vue 页面闪烁的问题_vue页面加载闪烁问题的解决方法
- Qt Creator查找和更换
- 大数据学习规划(新手入门)
- git bash命令_更优雅地使用命令行
- Java文件下载/下载文件的案例
- step7db块寻址_step7中的难点:间接寻址示例,中文详细注释。
- SpringBoot 整合Redis报错:NoClassDefFoundError: redis/clients/util/SafeEncoder
- oracle表空间查询维护命令大全之二(undo表空间)
- 泛型的继承和通配符,同时归纳集合部分的面试点
- 云主机是什么,怎么才能购买性价比高的云主机
- 【PDF】java使用Itext生成pdf文档--详解
- 旋转卡壳算法(转载)
- Svn主分支次分支合并和版本回退
- Elementui el-select创建条目的多选下拉框 自定义校验 新增条目时字符长度限制
- Qt编写的项目作品11-带频谱的音乐播放器
- 戴老师论文阅读:Two-Timescale Channel Estimation for Reconfigurable Intelligent Surface Aided Wireless...
- WebView:Google,我已经长大了,知道自己区分安全!!
- Comcast:美国电视行业变革分析,在线直播市场前景巨大
- 怎么科学开奶,堵奶怎么办?
热门文章
- nginx 修改配置文件使之支持pathinfo,且隐藏index.php
- 假期别在家里要发霉了?可以靠他们度过无聊时光
- 成年人改变生活的方式,都是从它开始
- 鸿蒙思维和小央美,北市场附近艺术培训
- 微信 小程序 python 渲染_微信小程序渲染html内容
- php curl https 443,PHP CURL支持HTTP、HTTPS 请求亲测可用
- java 写入环境变量_Java环境变量配置 - import_key的个人空间 - OSCHINA - 中文开源技术交流社区...
- jdbc连接mysql的语法_JDBC连接MySQL
- android 带弧形背景,[Android日常]绘制弧形渐变背景
- 使有用计算机不注意卫生,保护眼睛注意细节有哪些