https://www.lydsy.com/JudgeOnline/problem.php?id=5286

https://www.luogu.org/problemnew/show/P4425

https://loj.ac/problem/2495

题面见上面。

然后因为懒得写公式了所以看这个人的博客吧:https://www.luogu.org/blog/litble-blog/solution-p4425

合并的原理如果看了那个博客还没看懂的话,不妨看看下面这张图:

我们要求的是最上面区间的答案,但显然不能是tr[a]=min(tr[a<<1]],tr[a<<1|1]),因为中间的区间还需要合并。

因为参考博客已经证明了tr[a]表示的区间长度对答案没有影响了所以我们就考虑所有的区间即可。

我们的suan函数的a是最上边区间的左区间,mx和num就是当前区间的mx[a]。

显然当mx>=num的时候a的左区间答案只受mx的影响,而右区间的靠右位置有可能不受mx的影响,因此递归处理。

当mx<num的时候a的右区间只受num的影响,取一个最小值为mid+1+num,再递归处理左区间即可(因为左区间的mx可能比num大)。

#include<cmath>
#include<queue>
#include<vector>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=2e5+5;
inline int read(){int X=0,w=0;char ch=0;while(!isdigit(ch)){w|=ch=='-';ch=getchar();}while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X;
}
int n,m,p,t[N],b[N],tr[N*4],mx[N*4];
int suan(int a,int l,int r,int num){if(l==r)return l+max(mx[a],num);int mid=(l+r)>>1;if(mx[a<<1|1]>=num)return min(tr[a],suan(a<<1|1,mid+1,r,num));else return min(suan(a<<1,l,mid,num),mid+1+num);
}
void upt(int a,int l,int r){mx[a]=max(mx[a<<1],mx[a<<1|1]);tr[a]=suan(a<<1,l,(l+r)>>1,mx[a<<1|1]);
}
void build(int a,int l,int r){if(l==r){tr[a]=t[l];mx[a]=b[l];return;}int mid=(l+r)>>1;build(a<<1,l,mid);build(a<<1|1,mid+1,r);upt(a,l,r);
}
void mdy(int a,int l,int r,int x){if(l==r){tr[a]=t[l];mx[a]=b[l];return;}int mid=(l+r)>>1;if(x<=mid)mdy(a<<1,l,mid,x);else mdy(a<<1|1,mid+1,r,x);upt(a,l,r);
}
int main(){n=read(),m=read(),p=read();for(int i=1;i<=n;i++){t[i]=t[i+n]=read();b[i]=t[i]-i;b[i+n]=t[i+n]-i-n;}build(1,1,n<<1);int lastans=tr[1]+n-1;printf("%d\n",lastans);for(int i=1;i<=m;i++){int x=read(),y=read();if(p)x^=lastans,y^=lastans;t[x]=t[x+n]=y;b[x]=y-x;b[x+n]=y-x-n;mdy(1,1,n<<1,x);mdy(1,1,n<<1,x+n);lastans=tr[1]+n-1;printf("%d\n",lastans);}return 0;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

转载于:https://www.cnblogs.com/luyouqi233/p/9092806.html

BZOJ5286:[HNOI/AHOI2018]转盘——题解相关推荐

  1. BZOJ5286 HNOI/AHOI2018转盘(分块/线段树)

    显然最优走法是先一直停在初始位置然后一次性走完一圈.将序列倍长后,相当于找一个长度为n的区间[l,l+n),使其中ti+l+n-1-i的最大值最小.容易发现ti-i>ti+n-(i+n),所以也 ...

  2. BZOJ5289 洛谷4437:[HNOI/AHOI2018]排列——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5289 https://www.luogu.org/problemnew/show/P4437 考虑 ...

  3. BZOJ5290 洛谷4438:[HNOI/AHOI2018]道路——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5290 https://www.luogu.org/problemnew/show/P4438 的确 ...

  4. HNOI/AHOI2018题解

    作为一名高二老年选手来补一下我省去年的省选题. D1T1:寻宝游戏 按顺序给出\(n\)个\(m\)位的二进制数\(a_i\),再在最前方添一个\(0\), 给出\(q\)次询问,每次询问给出一个同样 ...

  5. 洛谷4438 [HNOI/AHOI2018]道路

    标签:树形DP 题目 题目传送门 题目描述 W 国的交通呈一棵树的形状.W 国一共有n−1n - 1n−1个城市和nnn个乡村,其中城市从111到n−1n - 1n−1 编号,乡村从111到nnn编号 ...

  6. Luogu 4438 [HNOI/AHOI2018]道路

    $dp$. 这道题最关键的是这句话: 跳出思维局限大胆设状态,设$f_{x, i, j}$表示从$x$到根要经过$i$条公路,$j$条铁路的代价,那么对于一个叶子结点,有$f_{x, i, j} = ...

  7. luogu P4438 [HNOI/AHOI2018]道路

    题目传送门:https://www.luogu.org/problemnew/show/P4438 题意: 有n-1个点为城市,n-1个点为农村,每个城市连出两种道路,一边为公路,一边为铁路.现在每一 ...

  8. P4438 [HNOI/AHOI2018]道路

    这题倒是在树形dp的基础上添加了一些操作,但是做好预处理之后跟模板就差不多了 #include<cstdio> #include<cstring> #define neko 1 ...

  9. P4332 [SHOI2014]三叉神经树(LCT)

    Luogu4332 LOJ2187 题解 代码-Tea 题意 : 每个点有三个儿子 , 给定叶节点的权值\(0\)或\(1\)且支持修改 , 非叶子节点的权值为当有\(>=2\)个儿子的权值为\ ...

最新文章

  1. python列表常用方法
  2. 高等数学-微分方程知识点
  3. python守护线程_Python守护线程用法实例
  4. 什么情况导致 oom
  5. 关于Android Fragment基础点(转)
  6. 老王的心路历程(二):下一站Web体验监控产品
  7. 输入框中光标过长原因
  8. 程序员如何借助 AI 开挂股票神预测?| 技术头条
  9. ubuntu 16.04 创建新用户
  10. 【转】Linux下发生段错误时如何生成core文件
  11. 基于Task的异步模式的定义
  12. Linux文件系统(七)---系统调用之open操作(三) 之 open_namei函数
  13. php 百度天气,php使用百度天气接口示例
  14. SCVMM2012R2 服务模版系列(一)包含SQL实例的单层服务模版
  15. swagger整合springMVC
  16. 关于SQL2005安装完毕后,没有SQL Server Management Studio问题的解决方法
  17. 学生党蓝牙耳机怎么选?四款性价比高的蓝牙耳机推荐
  18. 插入U盘后 计算机未响应,电脑插入U盘后没有反应怎么办?
  19. 除了通信业 制造业也在关注5G
  20. 用python根据生日判断星座_星座生日配对测试爱情,用Python做输入生日,判

热门文章

  1. boost::local_time模块实现自纪元以来的秒数的测试程序
  2. GDCM:gdcm::ImplicitDataElement的测试程序
  3. ITK:优化简单的抛物面函数
  4. DCMTK:OFStack类的测试程序
  5. VTK:相互作用之ShiftAndControl
  6. OpenGL使用链表进行顺序独立的透明度
  7. 经典C语言程序100例之一零零
  8. 经典C语言程序100例之三三
  9. mysql数据库有触发器吗_MySQL数据库之MySQL 触发器实现
  10. oracle 树状结构一直出现不了_深入解析Oracle ASSM 段头块(PAGETABLE SEGMENT HEADER)结构...