[HNOI/AHOI2018]转盘
一个结论:一定存在一个最优解只走一圈。否则考虑从最后一个结束位置开始一定可以达到相同效果
画个图,类似是一种斜线感觉
考虑一个高度贡献的最高点
对于i开始的连续n个,答案是:max(Tj-j)+i+n-1
令ai=Ti-i
断环成链复制一倍,后面的ai只能更小,所以变成后缀:max(aj)+i+n-1
求ans=min(max(aj)+i+n-1)
还是不行
我们反过来考虑一个j会贡献的最小的i
如果一个j是整个后缀部分的最大值,那么贡献的最小的i就是j前面第一个大于aj的位置
如果不是,那么没用。
第一个性质就是单调栈模型了
线段树维护单调栈
ans=min(a(p(j))-p(j-1)),注意p(0)=0,并且必须p(j-1)<n
合并时候:
右儿子最大值小于c,不管,递归左儿子
大于c,记录le表示该区间,右儿子最大值开始往左整个前缀贡献的ans,然后取一下,递归右儿子
回来时候把当前区间的le更新
看代码更直观
代码:
#include<bits/stdc++.h>
#define reg register int
#define il inline
#define numb (ch^'0')
#define mid ((l+r)>>1)
using namespace std;
typedef long long ll;
il void rd(int &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=+;
const int inf=0x3f3f3f3f;
int n,m,typ;
int a[N];
struct node{
int ans,mx;//mx->-0x3f3f3f3f
int le;
}t[*N];
int pushup(int x,int l,int r,int c){
if(l==r){
if(t[x].mx<=c&&l-<n) return c+l-;
else if(t[x].mx>c&&l<n) return c+l;
return inf;
}
if(t[x<<|].mx<=c) return pushup(x<<,l,mid,c);
return min(t[x].le,pushup(x<<|,mid+,r,c));
}
void build(int x,int l,int r){
if(l==r){
t[x].mx=a[l];
if(l-<n) t[x].ans=a[l]+l-,t[x].le=l-;
else t[x].ans=inf,t[x].le=inf;
return;
}
build(x<<,l,mid);
build(x<<|,mid+,r);
t[x].mx=max(t[x<<].mx,t[x<<|].mx);
t[x].ans=min(t[x].le=pushup(x<<,l,mid,t[x<<|].mx),t[x<<|].ans);
//cout<<" after pushup "<<l<<" "<<r<<" ans "<<t[x].ans<<" le "<<t[x<<1|1].le<<endl;
}
void chan(int x,int l,int r,int p,int c){
if(l==r){
t[x].mx=a[l];
if(l-<n) t[x].ans=a[l]+l-,t[x].le=l-;
else t[x].ans=inf,t[x].le=inf;
return;
}
if(p<=mid) chan(x<<,l,mid,p,c);
else chan(x<<|,mid+,r,p,c);
t[x].mx=max(t[x<<].mx,t[x<<|].mx);
t[x].ans=min(t[x].le=pushup(x<<,l,mid,t[x<<|].mx),t[x<<|].ans);
}
int main(){
rd(n);rd(m);rd(typ);
for(reg i=;i<=n;++i){
rd(a[i]);a[i]=a[i]-i;
a[i+n]=a[i]-n;
}
build(,,*n);
printf("%d\n",t[].ans+n);
int lasans=t[].ans+n;
int x,y;
while(m--){
rd(x);rd(y);
if(typ) x^=lasans,y^=lasans;
a[x]=y-x;
a[x+n]=y-x-n;
chan(,,*n,x,y-x);
chan(,,*n,x+n,y-x);
printf("%d\n",lasans=t[].ans+n);
}
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2019/3/2 15:07:28
*/
思路:
发现走一圈性质
断环为链复制一倍,找到i开始的时间,区间max,变成后缀max
反过来考虑一个点什么时候可能成为贡献ans的一员,单调栈的性质。线段树维护单调栈
跨区间pushup时候,保留左儿子和跨区间的信息,额外记录le变量
转化成后缀比区间好一些,考虑后缀max就可以套路地变成贡献了
[HNOI/AHOI2018]转盘的更多相关文章
- [HNOI/AHOI2018]转盘(线段树优化单调)
gugu bz lei了lei了,事独流体毒瘤题 一句话题意:任选一个点开始,每个时刻向前走一步或者站着不动 问实现每一个点都在$T_i$之后被访问到的最短时间 Step 1 该题可证: 最优方案必 ...
- 洛谷P4425 [HNOI/AHOI2018]转盘(线段树)
题意 题目链接 Sol 首先猜一个结论:对于每次询问,枚举一个起点然后不断等到某个点出现时才走到下一个点一定是最优的. 证明不会,考场上拍了3w组没错应该就是对的吧... 首先把数组倍长一下方便枚举起 ...
- BZOJ5286 HNOI/AHOI2018转盘(分块/线段树)
显然最优走法是先一直停在初始位置然后一次性走完一圈.将序列倍长后,相当于找一个长度为n的区间[l,l+n),使其中ti+l+n-1-i的最大值最小.容易发现ti-i>ti+n-(i+n),所以也 ...
- BZOJ5286:[HNOI/AHOI2018]转盘——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5286 https://www.luogu.org/problemnew/show/P4425 ht ...
- P4425 【[HNOI/AHOI2018]转盘】
颂魔眼中的一眼题我大湖南竟无一人\(AC\) 首先我们考虑一个性质:我们肯定存在一种最优解,满足从某个点出发,一直往前走,不停下来. 证明:我们假设存在一种最优解,是在\(t_i\)的时候到达\(a\ ...
- 【题解】Luogu P4436 [HNOI/AHOI2018]游戏
原题传送门 \(n^2\)过百万在HNOI/AHOI2018中真的成功了qwqwq 先将没门分格的地方连起来,枚举每一个块,看向左向右最多能走多远,最坏复杂度\(O(n^2)\),但出题人竟然没卡(建 ...
- [Bzoj5285][洛谷P4424][HNOI/AHOI2018]寻宝游戏(bitset)
P4424 [HNOI/AHOI2018]寻宝游戏 某大学每年都会有一次Mystery Hunt的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为新生 ...
- 【LG4437】[HNOI/AHOI2018]排列
[LG4437][HNOI/AHOI2018]排列 题面 洛谷 题解 题面里这个毒瘤的东西我们转化一下: 对于\(\forall k,j\),若\(p_k=a_{p_j}\),则\(k<j\). ...
- 洛谷P4425 转盘 [HNOI/AHOI2018] 线段树+单调栈
正解:线段树+单调栈 解题报告: 传送门! 1551又是一道灵巧连题意都麻油看懂的题,,,,所以先解释一下题意好了,,,, 给定一个n元环 可以从0时刻开始从任一位置出发 每次可以选择向前走一步或者在 ...
随机推荐
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(八)线上Mysql数据库崩溃事故的原因和处理
前文提要 承接前文<一次线上Mysql数据库崩溃事故的记录>,在文章中讲到了一次线上数据库崩溃的事件记录,建议两篇文章结合在一起看,不至于摸不着头脑. 由于时间原因,其中只讲了当时的一些经 ...
- Webpack 2 视频教程 004 - Webpack 初体验
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...
- 开启C语言的学习之门
本人是一枚工业界的码农,为了职业道路越来越宽广决定向上位机方面进军,C语言曾经在大学里面学过点皮毛但是离应用远远不够,尽量每天在工作之余更新自己学习的进度,同时也希望有大神能给予在编程道路上的指导,话 ...
- cometd简单用例
准备工作 整个例子的源码下载:http://pan.baidu.com/s/1gfFYSbp 下载服务端jar文件 Comet4J目前仅支持Tomcat6.7版本,根据您所使用的Tomcat版本下载[ ...
- spring boot之mybatis配置
配置在application.yml文件中 mybatis-plus: # 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Map ...
- doc窗口 输入命令net start mysql 服务名无效
解决方案: 1.win+R键输入cmd敲回车进入dos界面: 2.输入cd d:/mysql-5.5.25/bin敲回车,发现没变化: 3.输入d:敲回车,定位到d:\mysql-5.5.25\bin ...
- 安装Visual Studio开发平台
1.找一个VS2013的安装包,下载到D盘上,勾选相应的选项安装. 安装的过程很漫长,至少需要一个小时. 2.安装已完成,启动. . 3.登录. \ 4启动VS2013. 5.新建c#类库 6.输入代 ...
- 网络:Xen理解
Xen是由剑桥大学计算机实验室开发的一个开源项目.是一个直接运行在计算机硬件之上的用以替代操作系统的软件层,它能够在计算机硬件上并发的运行多个客户操作系统(Guest OS). 一.Xen虚拟化类型 ...
- SE Springer小组之《Spring音乐播放器》可行性研究报告一、二(转载)
此文转载自组员小明处~~ 1 引言 1.1编写目的 <软件工程>课程,我们团队计划开发一个音乐播放器.本文档是基于网络上现有的音乐播放器的特点,团队计划实现的音乐播放器功能和团队 ...
- 个人作业 - Week3 - 案例分析
调研与评测 真实用户采访: 用户姓名: 刘斯盾 用户的背景和需求: 用户是一位计算机专业学生,需要浏览技术博客来扩充自己的学识. 用户使用博客园证明: 产品是否解决用户问题: 在码代码过程中遇到的很多 ...