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. 网络1712--c语言一二维数组作业总结

    1.成绩摆前头 1.1基本要求(1分) 按时交 - 有分 未交 - 0分 迟交一周以上 - 倒扣本次作业分数 抄袭 - 0分 泛泛而谈(最多七分) 1.2评分要点 PTA作业总结(4分) 同学代码互评 ...

  2. 和为S的连续正数序列——牛客网(剑指offer)

    题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...

  3. DistBlockNet:A Distributed Blockchains-Based Secure SDN Architecture for IOT Network

    现有问题 随着IOT中智能设备多样性和数目的增加,IOT的灵活性,效率,可用性,安全性和可扩展性的问题越来越明显. 实验目标 按照高适应性,可用性,容错性,性能,可靠性,可扩展性和安全性的设计原则,构 ...

  4. 腾讯云服务器上安装phstudy和lnmp

    phpstudy的安装:wget -c http://lamp.phpstudy.net/phpstudy.bin chmod +x phpstudy.bin #权限设置./phpstudy.bin ...

  5. egg.js 的优缺点

    egg.js 的优缺点 优点 所有的 web开发的点都考虑到了 agent 很有特色 文件夹规划到位 扩展能力优秀 缺点 最大的问题在于: 使用 loader 加载之后,失去了代码提示的能力 监控和运 ...

  6. 由路由器AP隔离引起的WEB服务不能访问的问题

    最近在自己的电脑上运行了一个Web服务,发现它只能被本机访问,无法在同一个局域网的其它设备访问. 于是在网上搜索了各种资料,通通都是在操作系统层面来分析解决问题的. 而我怎么尝试都不成功的情况下,差点 ...

  7. 计算机基础,Python基础--变量以及简单的循环

    一.计算机基础 1.CPU 相当于人体的大脑,用于计算处理数据. 2.内存  用于存储数据,CPU从内存调用数据处理计算,运算速度很快. PS:问:既然在内存里的数据CPU运算速度快,为什么计算机不全 ...

  8. Ubuntu下安装最新sublime

    1. Install the GPG key: wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key ...

  9. 理解Node.js安装及模块化

    1.安装Node Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Node.j ...

  10. 排序技巧——双关键字排序(快速排序,sort)

    一个萌新的成长之路 Background 在做题过程中,我们常会遇到对双关键字排序的情况,如:当分数相等时,序号小的在前. 这时我们可以通过定义cmp函数作为sort的参数进行排序. Solution ...