题意

题目链接

分析

  • 首先要发现一个结论:最优决策一定存在一种 先在出发点停留之后走一圈 的情况,可以考虑如下证明:
  1. 如果要停留的话一定在出发点停留,这样后面的位置更容易取到。

  2. 走超过两圈的情况都可以变成走一圈+再走一段,首先若干圈显然只有最后一圈是有意义的。

    但是可能在取到最后一个位置之前我们会把起点之前的一段后缀通过走一圈的方式取完,所以会再走一段。

  3. 进一步推理,发现情况2中,如果我们选择那段后缀的开头作为我们的起点,结果不会变差。容易归纳得到最终的答案一定只会走一圈。

  • 将序列倍长,记 \(a_i=T_i-i\) 不难得到 \(ans=\min\limits_{i=1}^n\{\max\limits_{j=i}^{i+n-1}a_{i+j-1}+i\}+n-1\)
  • 实际可以放宽约束,上式与下式等价:\(ans=\min\limits_{i=1}^n\{\max\limits_{j=i}^{2n}a_{i+j-1}+i\}+n-1\)
  • 我们要求的即 \(\min\limits_{i=1}^nsuf_i+i\),可以考虑像 楼房重建 一题一样线段树维护单调栈。具体操作的难点在于合并。
  • 因为维护后缀极值所以右区间的答案可以直接贡献。记录区间最大值 \(mx\) 和 在区间的右子区间影响左子区间之后,左子区间的答案 \(lf\)。考虑左边被右边最大的位置遮挡的问题。可以花 \(log\) 的时间找到左区间第一个 \(\ge mx_R\) 的位置 \(pos\) ,首先新产生了一个可能答案 \(pos+1+mx_R\) ,然后左区间的答案可以再花 \(log\) 的时间递归寻找答案。

  • 总时间复杂度 \(O(nlog^2n)\)。

代码链接

[HNOI2018]转盘[结论+线段树]的更多相关文章

  1. 【BZOJ5286】[HNOI2018]转盘(线段树)

    [BZOJ5286][HNOI2018]转盘(线段树) 题面 BZOJ 洛谷 题解 很妙的一道题目啊.(全世界除了我这题都有40分,就我是一个状压选手 首先来发现一些性质,我们走一圈一定不会更差. 为 ...

  2. [BZOJ5286][洛谷P4425][HNOI2018]转盘(线段树)

    5286: [Hnoi2018]转盘 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 15  Solved: 11[Submit][Status][Di ...

  3. [BJOI2019] 删数 [dp转贪心结论+线段树]

    题面 传送门 思路 dp部分 以下称合法序列为原题面中可以删空的序列 这个是我在模拟考场上的思路 一开始我是觉得,这个首先可以写成一个dp的形式:$dp[i][j]$表示用$j$个数字填满了目标序列的 ...

  4. UNR#3 Day1——[ 堆+ST表+复杂度分析 ][ 结论 ][ 线段树合并 ]

    地址:http://uoj.ac/contest/45 第一题是鸽子固定器. 只会10分.按 s 从小到大排序,然后 dp[ i ][ j ][ k ] 表示前 i 个元素.已经选了 j 个.最小值所 ...

  5. 【BZOJ2770】YY的Treap 结论+线段树

    [BZOJ2770]YY的Treap Description 志向远大的YY小朋友在学完快速排序之后决定学习平衡树,左思右想再加上SY的教唆,YY决定学习Treap.友爱教教父SY如砍瓜切菜般教会了Y ...

  6. 【做题】cf603E——线段树分治

    首先感谢题解小哥,他在标算外又总结了三种做法. 此处仅提及最后一种做法. 首先考虑题目中要求的所有结点度数为奇数的限制. 对于每一个联通块,因为所有结点总度数是偶数,所以总结点数也必须是偶数的.即所有 ...

  7. bzoj5123 [Lydsy12月赛]线段树的匹配

    题意: 线段树是这样一种数据结构:根节点表示区间 [1, n]:对于任意一个表示区间 [l, r] 的节点,若 l < r, 则取 mid = ⌊l+r/2⌋,该节点的左儿子为 [l, mid] ...

  8. BZOJ.5286.[AHOI/HNOI2018]转盘(线段树)

    BZOJ LOJ 洛谷 如果从\(1\)开始,把每个时间\(t_i\)减去\(i\),答案取决于\(\max\{t_i-i\}\).记取得最大值的位置是\(p\),答案是\(t_p+1+n-1-p=\ ...

  9. BZOJ5286: [Hnoi2018]转盘 (线段树)

    题意 给你绕成一圈的物品共 \(n\) 个 , 然后从其中一个开始选 , 每次有两种操作 , 一是继续选择当前物品 , 二是选择这个后一个物品 . 选择后一个物品要求当前的时刻大于后一个的 \(T_i ...

随机推荐

  1. PRD文档怎么写

    昨天学习PMP的相关文档,正好看到里面讲的PRD文档是怎么写的 就把一些学习过程,思维方式,还有用到的工具给记录下来 方便自己以后需要的时候,再去查阅,再读这个教程的时候,我顺便用脑图画了一下 脑图工 ...

  2. go语言练习:条件语句和循环语句

    1.for循环+if条件语句简单例子: package main import "fmt" func main() { var a int for a = 0; a <= 2 ...

  3. oracle EBS rtf报表不能输出模板样式

    1.需要定义中文的数据定义 2.缺少文件 cd $ADMIN_SCRIPTS_HOME prefs.ora 3.查看文档  文档 ID 1059712.1 (1)请求模版显示不出来 解决:模版定义中模 ...

  4. SQL Server自动备份 备份到本地或者远程服务器

    0.1 在SQLServer2008 --> 备份数据库 --> 安全 --> 新建用户 --> 用户名 选择该windows用户 (确保 --> 机器名/人名 --&g ...

  5. sysbench使用

      1 部署 1.1 官方主页 https://github.com/Percona-Lab/sysbench-tpcc https://github.com/akopytov/sysbench 1. ...

  6. CentOS配置rsyslog Serve

    CentOS6配置rsyslog Server: vi /etc/rsyslog.conf: #启用如下tcp支持: $ModLoad imtcp $InputTCPServerRun 514 #添加 ...

  7. months_between()用法

    orcl中months_between()函数用法如下: 格式:即MONTHS_BETWEEN(日期1,日期2) 例如: select months_between(to_date('2018-10- ...

  8. python基础学习18----面向对象简述

    这里就不再讲面向对象的相关概念知识或者与面向过程的比较了,直接进入类的学习 1.类的创建 class people: def __init__(self):#构造函数 pass sfencs=peop ...

  9. 【SQL SERVER】语法复习

    一.数据类型  截图来源:http://www.w3school.com.cn/sql/sql_datatypes.asp 二.数据表操作 1.创建数据表 USE [Test] GO /****** ...

  10. selenium-百度搜索框输入后,定位联想下拉框元素

    1.输入关键字后,显示联想下拉框,鼠标右键对应的联想字段,点击检查,就可在F12模式下元素查看器中定位到,之后使用Xpath定位.