Description

Solution

首先注意到一个点不会走两次,只会有停下来等待的情况,把序列倍长

那么如果枚举一个起点\(i\),答案就是 \(min(max(T[j]+n-(j-i)-1)),j∈[i,2*n]\)

相当于从 \(i\) 出发,先走到 \(j\) 停下来,然后再走完剩下的,如果不合法则不会更优

最优情况一定是把等待时间尽量用在前面(把起点往前移)

设 \(a[i]=T[i]-i\)

原式变为: \(min(max(a[j]+i)+n-1),j∈[i,2*n]\)

维护 \(max(a[j]+i)\) 即可,可以用线段树维护,每一次修改向上合并维护这个东西

\(i,j\) 是有偏序关系的每一次要维护跨过 \(mid\) 的答案

向上合并需要一个 \(log\) 的递归查询

复杂度是 \(O(n*log^2)\)

#include<bits/stdc++.h>
#define ls (o<<1)
#define rs (o<<1|1)
using namespace std;
const int N=2e5+10;
int n,tr[N*4],mx[N*4],Q,P,T[N],a[N],ans=0;
inline int qry(int l,int r,int o,int x){
if(l==r)return l+max(x,mx[o]);
int mid=(l+r)>>1;
if(mx[rs]>=x)return min(tr[o],qry(mid+1,r,rs,x));
return min(qry(l,mid,ls,x),mid+1+x);
}
inline void upd(int l,int r,int o){
int mid=(l+r)>>1;
tr[o]=qry(l,mid,ls,mx[rs]);
mx[o]=max(mx[ls],mx[rs]);
}
inline void build(int l,int r,int o){
if(l==r){tr[o]=T[l];mx[o]=a[l];return ;}
int mid=(l+r)>>1;
build(l,mid,ls);build(mid+1,r,rs);
upd(l,r,o);
}
inline void Modify(int l,int r,int o,int sa){
if(l==r){tr[o]=T[l];mx[o]=a[l];return ;}
int mid=(l+r)>>1;
if(sa<=mid)Modify(l,mid,ls,sa);
else Modify(mid+1,r,rs,sa);
upd(l,r,o);
}
int main(){
freopen("circle.in","r",stdin);
freopen("circle.out","w",stdout);
cin>>n>>Q>>P;
for(int i=1;i<=n;i++){
scanf("%d",&T[i]);T[i+n]=T[i];
a[i]=T[i]-i;a[i+n]=T[i+n]-i-n;
}
build(1,n*2,1);
printf("%d\n",ans=tr[1]+n-1);
int x,y;
while(Q--){
scanf("%d%d",&x,&y);x^=ans*P;y^=ans*P;
T[x]=y;T[x+n]=y;a[x]=T[x]-x;a[x+n]=T[x+n]-x-n;
Modify(1,n*2,1,x);Modify(1,n*2,1,x+n);
printf("%d\n",ans=tr[1]+n-1);
}
return 0;
}

bzoj 5286: [Hnoi2018]转盘的更多相关文章

  1. 5286: [Hnoi2018]转盘

    5286: [Hnoi2018]转盘 链接 分析: $\min\limits_{i=1}^n \{ \max\limits_{j=i}^{i + n - 1} \{ a_{j}+i \} \} +n- ...

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

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

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

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

  4. [HNOI2018]转盘

    [HNOI2018]转盘 给你一个 \(n\) 元环, 你可以在 \(0\) 时刻从任意一个位置出发, 每一秒可以选择往后或者留在原地每个点有个参数 \(T_i\) , 当你走到 \(i\) 的时间 ...

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

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

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

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

  7. bzoj 5287: [Hnoi2018]毒瘤

    Description Solution \(dfs\) 出一棵生成树之后,多出来的边就都是反祖边了 把反祖边两个端点都拿出来,就会得到最多 \(k=2*(m-n+1)\) 个关键点 除了关键点以外的 ...

  8. bzoj 5285: [Hnoi2018]寻宝游戏

    Description Solution 把输入的 \(n\) 个二进制数看作一个大小为 \(n*m\) 的矩阵 把每一列压成一个二进制数,其中最高位是最下面的元素 然后就有了 \(m\) 个二进制数 ...

  9. bzoj 5289: [Hnoi2018]排列

    Description Solution 首先注意到实际上约束关系构成了一棵树 考虑这个排列 \(p\),编号为 \(a[i]\) 的出现了,\(i\) 才可以出现 那么如果连边 \((a[i],i) ...

随机推荐

  1. python实现朴素贝叶斯

    参考:<机器学习实战>- Machine Learning in Action 一. 基本思想  简单的说,用概率的高低来决定数据属于哪一类别,这就是贝叶斯决策理论的核心思想,即选择具有最 ...

  2. Beta阶段敏捷冲刺报告-DAY3

    Beta阶段敏捷冲刺报告-DAY3 Scrum Meeting 敏捷开发日期 2017.11.4 会议时间 12:30 会议地点 软工所 参会人员 全体成员 会议内容 当天任务确认,进度调整, 讨论时 ...

  3. 项目Beta冲刺预热

    Beta准备 1. 讨论组长是否重选的议题和结论. 经过讨论,我们认为,经过一段时间的磨合,现任组长是不需要更换的. 2. 下一阶段需要改进完善的功能. 增加关于征信的功能,贴近选题主题 美化界面,尽 ...

  4. 201621123060 《Java程序设计》第六周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰 ...

  5. 算法第四版学习笔记之快速排序 QuickSort

    软件:DrJava 参考书:算法(第四版) 章节:2.3快速排序(以下截图是算法配套视频所讲内容截图) 1:快速排序 2:

  6. JAVA_SE基础——45.基本类型变量.值交换[独家深入解析]

    需求:定义一个函数交换两个基本类型变量的值. 相信看过我前面的文章的同学都应该看的懂我以下的代码: class Demo2 { public static void main(String[] arg ...

  7. 解决IE下a标签点击有虚线边框的问题

    解决IE下a标签点击有虚线边框的问题 关键词:IE去除虚线边框.IE解决a标签虚线问题 先看看IE下,a标签出现的虚线边框问题: (上面中,红线包裹的就是一个翻页的按钮,按钮实际是hml的a标签做的, ...

  8. nodejs 使用CAS 实现 单点登录(SSO) 【开源库实现,简单】

    大部分企业使用 java 开发业务系统, 针对java cas的认证 demo 比较多 ,还有PHPCAS ,标准的参考这里: phpCAS 的使用 整理登录流程如下图,图片来自网络 找了不少资料,n ...

  9. final类与final方法

    inal---用于类.方法前. final类---不可被继承. final方法---不可被覆盖. final类不能被继承. 如果我们不希望一个类被继承,我们使用final来修饰这个类.这个类将无法被继 ...

  10. 用js来实现那些数据结构(数组篇02)

    上一篇文章简单的介绍了一下js的类型,以及数组的增删方法.这一篇文章,我们一起来看看数组还有哪些用法,以及在实际工作中我们可以用这些方法来做些什么.由于其中有部分内容并不常用,所以我尽量缩小篇幅.在这 ...