[HNOIAHOI2018] 转盘(线段树维护单调栈)

problem

洛谷链接

solution

结论:最优方案中一定有一种是全程不停的。

断环成链,接一个 [1,n][1,n][1,n] 在后面形成 2n2n2n 的序列,同时将时间戳逆过来。

转化成:在 ttt 时刻从某个位置 i∈[n,2n)i\in[n,2n)i[n,2n) 开始往前取物品,时刻 −1-11,物品 jjjtjt_jtj 时刻消失,要求标记所有的物品。最小化这个 ttt

ttt 时刻开始从 iii 位置到物品 jjj,需要 i−ji-jij 的时间,即 ∀j∈(i−n,i]t−(i−j)≥Tj\forall_{j\in(i-n,i]}\ t-(i-j)\ge T_jj(in,i] t(ij)Tj

显然全程不停歇是更好的。

t−(i−j)≥tj⇒t≥tj−j+i,j∈(i−n,i]⇒tmin⁡=max⁡{tj−j}+i,j∈(i−n,i]t-(i-j)\ge t_j\Rightarrow t\ge t_j-j+i,j\in(i-n,i]\Rightarrow t_{\min}=\max\{t_j-j\}+i,j\in(i-n,i]t(ij)tjttjj+i,j(in,i]tmin=max{tjj}+i,j(in,i]

考虑枚举 i∈[n,2n)i\in[n,2n)i[n,2n),算出 [i]tmin⁡[i]t_{\min}[i]tmin 整体取 min⁡\minmin 才是最终答案,每个 iii 的计算都要 nlog⁡nn\log nnlogn

ai=Ti−ia_i=T_i-iai=Tii,则 ans=min⁡n≤i<2n{max⁡i−n<j≤i{aj}+i}ans=\min_{n\le i< 2n}\big\{\max_{i-n<j\le i}\{a_j\}+i\big\}ans=minni<2n{maxin<ji{aj}+i}

iii 替换 i+n−1i+n-1i+n1,有 ans=min⁡1≤i≤n{max⁡i≤j≤i+n−1{aj}+i}+n−1ans=\min_{1\le i\le n}\big\{\max_{i\le j\le i+n-1}\{a_j\}+i\big\}+n-1ans=min1in{maxiji+n1{aj}+i}+n1

因为 ai=Ti−i>ai+n=Ti−(i+n)a_i=T_i-i>a_{i+n}=T_{i}-(i+n)ai=Tii>ai+n=Ti(i+n),所以稍微扩大 jjj 范围对答案无影响。

ans=min⁡1≤i≤n{max⁡i≤j≤2n{aj}+i}+n−1ans=\min_{1\le i\le n}\big\{\max_{i\le j\le 2n}\{a_j\}+i\big\}+n-1ans=min1in{maxij2n{aj}+i}+n1

iii 处理一个后缀最大值就能得到答案,到此也只是扔了个 logloglog 并没起到多大优化,O(nm)O(nm)O(nm) 仍无法接受。

iii 不行转过来考虑 jjj,考虑每个 jjj 的答案是怎样的。(特别地,a0=infa_0=infa0=inf

  • 如果 jjj 是后缀最大值点。

    对于 jjj,往前找到第一个 ak>aja_k>a_jak>ajkkki∈(k,n]i\in(k,n]i(k,n] 都是 jjj 处取 max⁡\maxmax,当 i=k+1i=k+1i=k+1 时才满足外层的 min⁡\minmin 操作,因此 jjj 的贡献应为 aj+k+1a_j+k+1aj+k+1

    iii 的限制可以反推得到 k<nk<nk<n

  • 如果 jjj 不是,那答案仍是后面某个点产生的。

  • 最后就是这些 jjj 贡献取 min⁡\minmin

基于这样的分类,发现可以从后往前维护 aja_jaj 的一个单调递增栈。

假设单调栈内的元素为 s0=0<s1<...<sxs_0=0<s_1<...<s_xs0=0<s1<...<sx

ans=min⁡1≤i≤x{asi+si−1+1}+n−1=min⁡1≤i≤x{asi+si−1}+nans=\min_{1\le i\le x}\big\{a_{s_i}+s_{i-1}+1\big\}+n-1=\min_{1\le i\le x}\big\{a_{s_i}+s_{i-1}\big\}+nans=min1ix{asi+si1+1}+n1=min1ix{asi+si1}+n,要求 si−1<ns_{i-1}<nsi1<n

用线段树来维护单调栈楼房重建,具体合并两个区间单调栈。

  • 右子树答案直接拿。
  • 用右子树最大值在做子树内找到最靠近右子树的第一个比其大的位置返回。
  • 对该位置前面的取整体最小值。

最优位置 jjj 要满足 sj−1<ns_{j-1}<nsj1<n 所以要记录这个询问的结果位置。

但最终答案实际上就是 i∈(n,2n]i\in(n,2n]i(n,2n] 的最大值在 [1,n][1,n][1,n] 里面二分找 jjj 执行上述流程中得到的。

看似是维护 ai(1≤i≤2n)a_i(1\le i\le 2n)ai(1i2n) 的最大值,事实上 i∈[n,2n)i\in[n,2n)i[n,2n) 的最大值 ai=Ti−ia_i=T_i-iai=Tii,就等于 i−n∈[1,n)i-n\in[1,n)in[1,n) 的最大值 ai−n=Ti−n−(i−n)=Ti−i+na_{i-n}=T_{i-n}-(i-n)=T_i-i+nain=Tin(in)=Tii+n 减去 nnn

所以线段树只需要维护 [1,n][1,n][1,n] 的最大值信息即可,再在 [1,n][1,n][1,n] 里面查。

时间复杂度 O((n+Q)log⁡n2)O((n+Q)\log n^2)O((n+Q)logn2)

code

#include <bits/stdc++.h>
using namespace std;
#define inf 0x7f7f7f7f
#define maxn 100005
int n, m, p;
int t[maxn], Max[maxn << 2], Ans[maxn << 2];#define lson now << 1
#define rson now << 1 | 1
#define mid (l + r >> 1)int query( int now, int l, int r, int x ) {if( l == r ) return Max[now] > x ? x + l : inf;if( Max[rson] <= x ) return query( lson, l, mid, x );else return min( Ans[now], query( rson, mid + 1, r, x ) );
}void pushup( int now, int l, int r ) {Max[now] = max( Max[lson], Max[rson] );Ans[now] = query( lson, l, mid, Max[rson] );
}void build( int now, int l, int r ) {if( l == r ) { Max[now] = t[l] - l; return; }build( lson, l, mid );build( rson, mid + 1, r );pushup( now, l, r );
}void modify( int now, int l, int r, int pos ) {if( l == r ) { Max[now] = t[pos] - pos; return; }if( pos <= mid ) modify( lson, l, mid, pos );else modify( rson, mid + 1, r, pos );pushup( now, l, r );
}int main() {scanf( "%d %d %d", &n, &m, &p );for( int i = 1;i <= n;i ++ ) scanf( "%d", &t[i] );build( 1, 1, n );int ans = query( 1, 1, n, Max[1] - n ) + n;printf( "%d\n", ans );while( m -- ) {int x, y;scanf( "%d %d", &x, &y );if( p ) x ^= ans, y ^= ans;t[x] = y, modify( 1, 1, n, x );ans = query( 1, 1, n, Max[1] - n ) + n;printf( "%d\n", ans );}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P2446 [SDOI2010]大陆争霸

P2446 [SDOI2010]大陆争霸 题意&#xff1a; n个点&#xff0c;m个边&#xff0c;wi为每个边的边权&#xff0c;对于每个点i&#xff0c;其被l个点保护着&#xff0c;也就是如果保护其的点没有被破坏&#xff0c;点i无法被破坏(也无法经过其前往其他点)。现在从1出兵(无限数量…

EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽

DbContextPool 是 ASP.NET Core 2.1 引入的新特性&#xff0c;可以节省创建 DbContext 实例的开销&#xff0c;但没有想到其中藏着一个小坑。最近有一个 ASP.NET Core 项目持续运行一段时间后日志中就会出现数据库连接池达到最大连接数限制的错误&#xff1a;System.InvalidOpe…

AtCoder4505 [AGC029F] Construction of a tree(二分图+网络流+dfs+构造)

problem 洛谷链接 solution 考虑 Ω{E1,...,En−1}\Omega\{E_1,...,E_{n-1}\}Ω{E1​,...,En−1​} 的一个子集 SSS&#xff0c;记 f(S){u∣u∈Ei∈S}f(S)\{u\mid u\in E_i\in S\}f(S){u∣u∈Ei​∈S}。 显然当 S≠∅∧∣f(S)∣≤∣S∣S\ne\empty\wedge\big|f(S)\big|\le |…

P2447 [SDOI2010]外星千足虫

P2447 [SDOI2010]外星千足虫 题意&#xff1a; 有n个未知数 给你一个m行n1列的式子&#xff0c;对于每行&#xff0c;1到n列为这个n个未知数的系数&#xff0c;第n1列为该行式子的和mod2&#xff0c;问n个未知数是否有唯一解&#xff0c;并输出&#xff0c;并输出最少需要前k…

Kubernetes架构为什么是这样的?

小编序&#xff1a;在上周发布的《从“鸿沟理论”看云原生&#xff0c;哪些技术能够跨越鸿沟&#xff1f;》一文中&#xff0c;灵雀云CTO陈恺表示&#xff1a;Kubernetes在云计算领域已经成为既定标准&#xff0c;进入主流市场&#xff0c;最新版本主要关注在稳定性、可扩展性方…

AtCoder4380 [AGC027F] Grafting(拓扑排序)

problem 洛谷链接 solution 首先特判掉两棵树一开始就相同的情况。 那么接下来就是一定要操作才能相同的情况了。 群龙无首不行&#xff0c;我们先定根。不妨枚举第一步的叶子操作&#xff0c;即枚举叶子以及其接的点。 然后对于 A,BA,BA,B 都以这个叶子为根&#xff0c;…

开源 , KoobooJson一款高性能且轻量的JSON框架

在C#领域&#xff0c;有很多成熟的开源JSON框架&#xff0c;其中最著名且使用最多的是 Newtonsoft.Json ,然而因为版本迭代,其代码要兼容从net2.0到现在的最新的net框架,并且要支持.net平台下的其它语言,所以最新发布版本的Newtonsoft.Json其dll大小接近700k,另一方面,因为其复…

高斯消元模板

高斯消元通用 #include<stdio.h> #include<algorithm> #include<iostream> #include<string.h> #include<math.h> using namespace std;const int MAXN50;int a[MAXN][MAXN];//增广矩阵 int x[MAXN];//解集 bool free_x[MAXN];//标记是否是不确…

[CodeForces gym 102956 D] Bank Security Unification(位运算优化dp)

problem cf链接 solution 读完题先直接暴力 dpdpdp 拿出来&#xff0c;dpimax⁡j<i{dpj(fi&fj)}dp_i\max_{j<i}\big\{dp_{j}(f_i\&f_j)\big\}dpi​maxj<i​{dpj​(fi​&fj​)}。 谁能优化谁就是爸爸 假设存在 j<k<ij<k<ij<k<i&…

P2403 [SDOI2010]所驼门王的宝藏

P2403 [SDOI2010]所驼门王的宝藏 题意&#xff1a; R * C的地图上有n个宝藏&#xff0c;给你n个宝藏的坐标&#xff0c;每个宝藏的位置上还有一个传送门&#xff0c;传送门有三种类型&#xff0c;1.可以传送到同行的其他宝藏位置&#xff0c;2.可以传送到同列的其他宝藏位置 …

分布式系统的构建原则

什么是构建一个可维护和可扩展的系统的意义&#xff1f;在早期&#xff0c;一个系统的形态&#xff0c;只是满足用户和服务器资源之间的通道&#xff0c;唯一要扩展和维护的是系统后面的资源&#xff0c;保证资源的可用和够用&#xff0c;而系统本身的压力并不大。系统设计跟我…

[HEOI2016TJOI2016]排序(二分+线段树)

problem 洛谷链接 solution 在一个丝毫没有单调性的问题中很难想到将其转化为二分。 二分最后在第 ppp 位置上的值 xxx。 然后将所有 ≥x\ge x≥x 的赋为 111&#xff0c;所有 <x<x<x 的赋为 000。 经过一系列区间排序操作后&#xff0c;最后我们只在乎第 ppp 位…

可持久化4--可持久化并查集

可持久化并查集 可持久化并查集 按秩合并并查集 可持久化数组 首先并查集不能采用路径压缩&#xff0c;这是因为一次findR操作中&#xff0c;fa数组的很多位置&#xff08;u->ru&#xff09;会发生修改&#xff0c;由于每次修改都需要在可持久化数组上复制产生log个新结…

ASP.NET Core 2.2中的Endpoint路由

在ASP.NET Core 2.2中&#xff0c;新增了一种路由&#xff0c;叫做Endpoint&#xff08;终结点&#xff09;路由。本文将以往的路由系统称为传统路由。本文通过源码的方式介绍传统路由和Endpoint路由部分核心功能和实现方法&#xff0c;具体功能上的差异见官方文档。在升级到AS…

AtCoder2063 [AGC005E] Sugigma The Showdown(博弈论)

problem 洛谷链接 solution 考虑一条 (u,v)(u,v)(u,v) 的红边&#xff0c;在蓝树上 u,vu,vu,v 两点距离 ≥3\ge 3≥3。 如果先手到达 u,vu,vu,v 其中任何一点且下一步后手行动无法抓住先手&#xff0c;那么这个游戏就将进入死循环了。 通过画图&#xff0c;你会发现这个结…

基于ASP.NET Core的模块化设计: 虚拟文件系统

土牛亲自录制的本文介绍视频Abp中文网(https://cn.abp.io/)提供翻译字幕基于ASP.NET Core的模块化设计: 虚拟文件系统简介创建模块化的应用程序很困难. 构建模块化的用户界面更加困难. 需要单独开发模块的页面和组件,但是最后要把它们集成在一起像单个UI一样创建这样的模块化架…

[SDOI2012]吊灯(结论)

problem 洛谷链接 solution 显然&#xff0c;颜色相同的灯泡形成一个连通块&#xff0c;且连通块的大小 i∣ni\mid ni∣n。 这道题要能发现一个结论&#xff1a;一定至少存在一种颜色的连通块 满足该联通块内的任意一个节点 都不是异种颜色点 的父亲。 即&#xff0c;至少…

一文带你全面认识Excel催化剂系列功能

2018年1月1日决定打造一款Excel插件&#xff0c;取名为Excel催化剂&#xff0c;历时半年的时间&#xff0c;在努力打造出和传统插件有功能差异化的基础上&#xff0c;让大家可以真正得到一些有价值非鸡肋的功能&#xff0c;对开发什么样的功能也构思了许久&#xff0c;同时对免…

可持久化汇总(讲解+题目)

可持久化(一) 可持久化(二) 可持久化3–可持久化01Trie 可持久化4–可持久化并查集 各模块的例题都在各自讲解下面有写 下面是加强练习 练习题讲解——肖然老师的博客 练习题&#xff1a; P4137 Rmq Problem / mex P4587 [FJOI2016]神秘数 CF484E Sign on Fence CF1080F Katya …

[学习笔记] 乱世之神杀疯了 —— K-D tree

文章目录K-D tree建树合并插入删除查询(估价函数)旋转坐标系题目练习[SDOI2012]最近最远点对[Violet]天使玩偶/SJY摆棋子[CQOI2016]K远点对[国家集训队]JZPFARThe closest M points简单题巧克力王国[BOI2007]Mokia 摩基亚[CH弱省胡策R2]TATT[BZOJ3815]卡常数[NOI2019]弹跳A sim…