题意:对于 \(n\) 个人,每个人有一个分数,现在要把所有人分成四等,使得:

  • 前三类都有人

  • 前三类中,任意类的人数不大于其他类的人数的两倍

  • 不能有 \(i\) 的分数比 \(j\) 高但是所属的等级不如 \(j\)

  • 定义 \(d_i\) 是第 \(i\) 类的最低分和第 \(i+1\) 类的最高分的差,求最优的方案,按照 \(d_1\rightarrow d_2\rightarrow d_3\) 为第一、第二、第三关键字排序

首先转化题意,我们考虑枚举一等和二等的人数 \(i\) 和 \(j\),枚举的同时加入两倍的限制,得到当前的 \(d_1\) 和 \(d_2\)。

然后我们考虑找到一种方式,得到“剩余 \(k\) 个人,要求三等奖的人数不小于 \(\dfrac{i}{2}\) 和 \(\dfrac{j}{2}\),不大于 \(2i\) 和 \(2j\) 的最优的三等奖人数”。也就是 \(O(1)\) 找到一个最优的决策点使得当前点和前一个点的差最大,且当前点的下标在一个确定的范围 \([l,r]\) 内。

首先,这是一个 \(\text{rmq}\) 问题,考虑 \(\text{st}\) 表,把所有的 \({a(i)-a(i-1),i}\) 加入 \(\text{st}\) 表中,然后 \(O(n\log n)\sim O(1)\) \(\text{rmq}\)求出 \([l,r]\) 范围内使 \(a_i-a_{i-1}\) 最小的 \(i\),从而进行转移。这是比较暴力的做法。 \(\text{Best Code}\) \(\text{by irkstepanov}\)

但是我们可以有更优秀的做法。我们发现 \([l,r]\) 的上下界是单调的,也就是随着 \(j\) 的增长,下界和上界都在单调的增长。这就提示我们使用单调队列优化。

我们可以把所有在界中的决策点丢进单调队列,每次随着j的增长,单调队列头部 \(\text{pop}\) 尾部 \(\text{push}\),也可以 \(O(1)\) 的找到最优的决策点。\(\text{Best Code}\) \(\text{by LHiC}\)

CF873E - Awards For Contestants的更多相关文章

  1. Codeforces 873E Awards For Contestants ST表

    原文链接https://www.cnblogs.com/zhouzhendong/p/9255885.html 题目传送门 - CF873E 题意 现在要给 $n(n\leq 3000)$ 个学生颁奖 ...

  2. Educational Codeforces Round 30

    Educational Codeforces Round 30  A. Chores 把最大的换掉 view code #pragma GCC optimize("O3") #pr ...

  3. 关注经典:CSS Awards 获奖网站作品赏析《第一季》

    每天都有很多新的网站推出,其中不乏一些设计极其优秀的作品.这个系列的文章,我为大家挑选了2012年赢得 CSS Awards 大奖的50个最佳网站.这些鼓舞人心的网站作品代表了网页设计的最高水平,相信 ...

  4. POJ 3140 Contestants Division 树形DP

    Contestants Division   Description In the new ACM-ICPC Regional Contest, a special monitoring and su ...

  5. Sicily 1299 Academy Awards (map + vector)集装箱

    链接:http://soj.me/show_problem.php?pid=1299&cid= Description Selected from 3,850 teams from 1,329 ...

  6. Gym 100952F&&2015 HIAST Collegiate Programming Contest F. Contestants Ranking【BFS+STL乱搞(map+vector)+优先队列】

    F. Contestants Ranking time limit per test:1 second memory limit per test:24 megabytes input:standar ...

  7. Awards and Certifications @EMC

    1. Awards 1.1 Jun. 12, 2012, Accurev Migration 1.2 Oct. 16, 2012, Deliver Inyo RTM to Rockies 1.3 Ju ...

  8. Unity Awards 2018最佳资源

    好的工具与资源,将帮助你的开发,达到事办功倍,今天我们将为大家介绍荣获Unity Awards 2018最佳资源的获奖作品. 最佳艺术工具:Aura - Volumetric Lighting Aur ...

  9. POJ 3140.Contestants Division 基础树形dp

    Contestants Division Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10704   Accepted:  ...

  10. Bossies 2015: The Best of Open Source Software Awards

    InfoWorld editors and contributors pick the top open source software for data centers, clouds, devel ...

随机推荐

  1. Type Script 在流程设计器的落地实践

    流程设计器项目介绍 从事过BPM行业的大佬必然对流程建模工具非常熟悉,做为WFMC三大体系结构模型中的核心模块,它是工作流的能力模型,其他模块都围绕工作流定义来构建. 成熟的建模工具通过可视化的操作界 ...

  2. 【Hadoop面试】基础概念、HDFS、MapReduce、Yarn、实战

    一.Hadoop概念及架构 1.是否看过Hadoop源码 2.正常工作的hadoop集群中hadoop都分别需要启动哪些进程,他们的作用分别是什么 3.hadoop和spark中的文件缓存方式 4.h ...

  3. 如何使用 IdGen 生成 UID

    在分布式系统中,雪花 ID 是一种常用的唯一 ID 生成算法.它通过结合时间戳.机器码和自增序列来生成 64 位整数 ID,可以保证 ID 的唯一性和顺序性. 在.Net 项目中,我们可以使用 IdG ...

  4. Go语言使用场景 | go语言与其它开源语言比较 | Go WEB框架选型

    一.Go语言使用场景 1. 关于go语言 2007年,受够了C++煎熬的Google首席软件工程师Rob Pike纠集Robert Griesemer和Ken Thompson两位牛人,决定创造一种新 ...

  5. jdk调度任务线程池ScheduledThreadPoolExecutor工作原理解析

    jdk调度任务线程池ScheduledThreadPoolExecutor工作原理解析 在日常开发中存在着调度延时任务.定时任务的需求,而jdk中提供了两种基于内存的任务调度工具,即相对早期的java ...

  6. JavaScript 深拷贝的循环引用问题

    如果说道实现深拷贝最简单的方法,我们第一个想到的就是 JSON.stringify() 方法,因为JSON.stringify()后返回的是字符串,所以我们会再使用JSON.parse()转换为对象, ...

  7. 模仿 vscode-server 把本地代码目录映射到外网

    目录 概述 分析 解决方案 准备一台VM 创建容器 SmartIDE 创建 直接使用 docker 创建 SSH 远程转发 内网穿透 ngrok frp 服务端 客户端 本文模仿 vscode-ser ...

  8. Linux 环境中使用 LVGL

    之前有记录过在 esp32 中使用 LVGL 的笔记,需要的小伙伴可以了解一下,esp-idf 移植 lvgl8.3.3 我之前整理的学习资料:https://www.cnblogs.com/jzcn ...

  9. [OpenCV实战]16 使用OpenCV实现多目标跟踪

    目录 1 背景介绍 2 基于MultiTracker的多目标跟踪 2.1 创建单个对象跟踪器 2.2 读取视频的第一帧 2.3 在第一帧中确定我们跟踪的对象 2.4 初始化MultiTrackerer ...

  10. [编程基础] Python lambda函数总结

    Python lambda函数教程展示了如何在Python中创建匿名函数.Python中的匿名函数是使用lambda关键字创建的. 文章目录 1 介绍 1.1 简单使用 1.2 Python lamb ...