题意:

有 \(n\) 个格子围成一圈,每个格子里有一个物品,每个物品的出现时间为 \(T_i\) 。开始时选择一个格子为起点,每个单位时间可以向前走一格或不动,若当前格的物品已出现则将其标记。有 \(m\) 次修改,每次修改一个物品的出现时间,并询问将所有物品标记的最短时间。

题解:

猜一下一个最优方案:选择一个点后停留一段时间后直接走一圈标记所有物品。感性分析一下是对的,因为多走超过一圈的地方可以用等待来代替。具体分析或证明可以看其他神仙的博客。

那么得到柿子:

\[ans=\displaystyle \min _{i=1}^n \{ \max_{j=i}^{i+n-1} \{T_j-(j-i)\}\}+n-1
\]

(前者为最大等待时间)。

整理一下柿子,设 \(a_j=T_j-j\) :

\[ans=\displaystyle \min _{i=1}^n \{ \max_{j=i}^{i+n-1} \{a_j\}+i\}+n-1
\]

我们发现对于 \([i+ n,2n]\) 的答案显然不会更优,所以我们减少一下限制,即:

\[ans=\displaystyle \min _{i=1}^n \{ \max_{j=i}^{2n} \{a_j\}+i\}+n-1
\]

发现最后对答案可能产生贡献的点的 \(a_j\) 一定从右到左单增。

于是我们直接用线段树维护区间最大值和 \(\min_{i=l}^{r/2}\{\max_{j=l}^{r}\{a_j\}+i\}\)即可,即维护一个单调栈。时间复杂度为 \(O(m\log^2 n)\) .

#include<cstdio>
#include<algorithm>
using namespace std;
inline int gi()
{
char c; int x=0;
for(;c<'0'||c>'9';c=getchar());
for(;c>='0'&&c<='9';c=getchar())x=(x<<1)+(x<<3)+c-'0';
return x;
}
const int N=200005;
int n,m,p,ans,t[N],st[N<<2],mx[N<<2];
#define lx (x<<1)
#define rx (x<<1|1)
int query(int x, int l, int r, int w)
{
if(l==r) return l+max(w,mx[x]);
int mid=l+r>>1;
if(mx[rx]>=w) return min(st[x],query(rx,mid+1,r,w));
return min(mid+1+w,query(lx,l,mid,w));
}
void pushup(int x, int l, int r)
{
int mid=l+r>>1;
mx[x]=max(mx[lx],mx[rx]);
st[x]=query(lx,l,mid,mx[rx]);
}
void build(int x, int l, int r)
{
if(l==r)
{
mx[x]=t[l],st[x]=t[l]+l;
return ;
}
int mid=l+r>>1;
build(lx,l,mid),build(rx,mid+1,r);
pushup(x,l,r);
}
void update(int x, int l, int r, int s)
{
if(l==r)
{
mx[x]=t[l],st[x]=t[l]+l;
return ;
}
int mid=l+r>>1;
s<=mid?update(lx,l,mid,s):update(rx,mid+1,r,s);
pushup(x,l,r);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("circle.in","r",stdin);
freopen("circle.out","w",stdout);
#endif
n=gi(),m=gi(),p=gi();
for(int i=1;i<=n;++i) t[i]=gi()-i,t[i+n]=t[i]-n;
build(1,1,n<<1);
printf("%d\n",ans=st[1]+n-1);
while(m--)
{
ans*=p;
int x=gi()^ans,y=gi()^ans;
t[x]=y-x,t[x+n]=t[x]-n;
update(1,1,n<<1,x),update(1,1,n<<1,x+n);
printf("%d\n",ans=st[1]+n-1);
}
}

(HN)AHOI2018 转盘的更多相关文章

  1. [HNOI/AHOI2018]转盘(线段树优化单调)

    gugu  bz lei了lei了,事独流体毒瘤题 一句话题意:任选一个点开始,每个时刻向前走一步或者站着不动 问实现每一个点都在$T_i$之后被访问到的最短时间 Step 1 该题可证: 最优方案必 ...

  2. 洛谷P4425 [HNOI/AHOI2018]转盘(线段树)

    题意 题目链接 Sol 首先猜一个结论:对于每次询问,枚举一个起点然后不断等到某个点出现时才走到下一个点一定是最优的. 证明不会,考场上拍了3w组没错应该就是对的吧... 首先把数组倍长一下方便枚举起 ...

  3. [HNOI/AHOI2018]转盘

    一个结论:一定存在一个最优解只走一圈.否则考虑从最后一个结束位置开始一定可以达到相同效果 画个图,类似是一种斜线感觉 考虑一个高度贡献的最高点 对于i开始的连续n个,答案是:max(Tj-j)+i+n ...

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

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

  5. BZOJ5286:[HNOI/AHOI2018]转盘——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5286 https://www.luogu.org/problemnew/show/P4425 ht ...

  6. P4425 【[HNOI/AHOI2018]转盘】

    颂魔眼中的一眼题我大湖南竟无一人\(AC\) 首先我们考虑一个性质:我们肯定存在一种最优解,满足从某个点出发,一直往前走,不停下来. 证明:我们假设存在一种最优解,是在\(t_i\)的时候到达\(a\ ...

  7. LCT小小结

    模板题P3690 基础题P3203[HNOI2010]弹飞绵羊 \(access\)是搞出一条端点为\(x,y\)的路径 , 且维护的是实子树的信息 . 由于题目比较简单 , \(access\)时还 ...

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

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

  9. HNOI2018

    d1t1[HNOI/AHOI2018]寻宝游戏 感觉很神,反正我完全没想到 分开考虑每一位,对于每一位i计算一个二进制数b[i], 对于第i位,从后往前第j个数这一位是1,那么b[i]^=(1< ...

随机推荐

  1. Xcode 9.0 报错,Safe Area Layout Guide Before IOS 9.0

    解决方案就是: 第一步 第二步 第三步 重新编译.

  2. LLDB常用指令

    1.help:列举所有的命令,也可以用于查询某个命令的说明,比如,help print,help help   2.print:打印,简写为,prin,pri,p,打印的结果比如,$10代表时该结果, ...

  3. 【剑指Offer面试编程题】题目1369:字符串的排列--九度OJ

    题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入: 每个 ...

  4. Nginx 不区分大小写

    location ~* .*\.(gif|jpg|jpeg|bmp|png|tiff|tif|ico|wmf|js)$ {       #         slowfs_cache    fastca ...

  5. jqgrid 合并表头

    参考:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:groupingheadar jQuery("#表格id").jqGri ...

  6. 2_05_MSSQL课程_查询_where,group by,having的区别以及内连接、案例练习

    SQL查询顺序 select distinct/top ..._ (5) 投影 from_(1)找到表  where_ (2)过滤掉我们不需要的数据    group by_ (3)分组操作    h ...

  7. 利用SSH在本机和远程服务器之间传输文件或文件夹

    1.从远程服务器上下载文件到本机 scp <服务器用户名>@<服务器地址>:<服务器中要下载的文件路径> <下载到本机的绝对路径> 2.从本机上传本地文 ...

  8. CXL联盟正式成立:成员均是行业巨头

    导读 今天,阿里巴巴.思科.戴尔EMC.Facebook.Google.HPE.华为.Intel.微软(按英文首字母排序)联合宣布,CXL联盟(Compute Express Link Consort ...

  9. 5G风口之下,NFV为何发展迅速

    导读 5G高带宽.低时延.大容量的接入方式,注定它一定要依赖于跟以往完全不同的专业设备模式来实现,因此也创造了更多的方向和机会.NFV就是其中之一. 5G最大的变化在网络层面,需要底层网络架构形成一种 ...

  10. Spring事务原理分析-部分一

    Spring事务原理分析-部分一 什么事务 事务:逻辑上的一组操作,组成这组操作的各个单元,要么全都成功,要么全都失败. 事务基本特性 ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要 ...