题目描述:

bz

luogu

题解:

看了半个晚上终于明白了。

首先最优决策一定有:在起始点停留一段时间然后一直前进。

解释网上有很多,在这里不赘述了。

(由于是环,先把$T$数组倍长。)

首先基于决策我们的答案是$n-1+min_{i=1}^{n}i+max_{j=i}^{i+n-1}T[j]-j$

考虑到$i+n-1$的后面一定不会有$max$,我们可以把上式变成$n-1+min_{i=1}^{n}i+max_{j=i}^{2*n}T[j]-j$

那么右面那个的形式可以看做$min_{i=l}^{mid}i+max_{j=i}^{r}A[j]$,其中$A[j]=T[j]-j$

那么设$t[u]$等于上面这个是式子,$mx[u]=max_{i=l}^{r}A[i]$。

所以差不多是这个形状:

显然$mx[u]$可以从下往上$O(1)$转移。

至于$t$即答案数组,由于我们有线段树,所以在线段树上分治搞下去。

具体按$i$指向左边一半的左边还是右边讨论,两者取$min$。

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = ;
template<typename T>
inline void read(T&x)
{
T f = ,c = ;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){c=c*+ch-'';ch=getchar();}
x = f*c;
}
int n,m,op,T[N<<],ans;
struct segtree
{
int t[N<<],mx[N<<];
int query(int l,int r,int u,int bas)
{
if(l==r)return l+max(bas,mx[u]);
int mid = (l+r)>>;
if(bas<=mx[u<<|])return min(query(mid+,r,u<<|,bas),t[u]);
else return min(query(l,mid,u<<,bas),mid++bas);
}
void update(int l,int r,int u)
{
int mid = (l+r)>>;
t[u] = query(l,mid,u<<,mx[u<<|]);
mx[u] = max(mx[u<<],mx[u<<|]);
}
void build(int l,int r,int u)
{
if(l==r){t[u]=T[l],mx[u]=T[l]-l;return ;}
int mid = (l+r)>>;
build(l,mid,u<<);
build(mid+,r,u<<|);
update(l,r,u);
}
void insert(int l,int r,int u,int qx)
{
if(l==r){t[u]=T[l],mx[u]=T[l]-l;return ;}
int mid = (l+r)>>;
if(qx<=mid)insert(l,mid,u<<,qx);
else insert(mid+,r,u<<|,qx);
update(l,r,u);
}
}tr;
int main()
{
read(n),read(m),read(op);
for(int i=;i<=n;i++)
read(T[i]),T[i+n]=T[i];
tr.build(,*n,);
printf("%d\n",ans=tr.t[]+n-);
for(int x,y,i=;i<=m;i++)
{
read(x),read(y);
if(op)x^=ans,y^=ans;
T[x] = y,T[x+n] = y;
tr.insert(,*n,,x);tr.insert(,*n,,x+n);
printf("%d\n",ans=tr.t[]+n-);
}
return ;
}

bzoj5286 [Hnoi2018]转盘的更多相关文章

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

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

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

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

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

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

  4. 5286: [Hnoi2018]转盘

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

  5. [HNOI2018]转盘

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

  6. bzoj 5286: [Hnoi2018]转盘

    Description Solution 首先注意到一个点不会走两次,只会有停下来等待的情况,把序列倍长 那么如果枚举一个起点\(i\),答案就是 \(min(max(T[j]+n-(j-i)-1)) ...

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

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

  8. [HNOI2018]转盘[结论+线段树]

    题意 题目链接 分析 首先要发现一个结论:最优决策一定存在一种 先在出发点停留之后走一圈 的情况,可以考虑如下证明: 如果要停留的话一定在出发点停留,这样后面的位置更容易取到. 走超过两圈的情况都可以 ...

  9. 【比赛】HNOI2018 转盘

    通过这题,我发现了我最大的缺陷,就是题目中重要的性质发现不了,所以导致后期根本做不了.还是要多做题,培养思维 对于这道题,来发现性质吧 对于每一条路线,因为它有用的就是最终的时刻,所以我们都可以把它变 ...

随机推荐

  1. [Xcode 实际操作]二、视图与手势-(1)UIView视图的基本使用

    目录:[Swift]Xcode实际操作 本文将演示在视图控制器的根视图里添加两个视图对象. import UIKit class ViewController: UIViewController { ...

  2. 指向函数的指针和block

    原文网址: http://www.cnblogs.com/cxbblog/p/3841226.html 一:block基础知识 block基础知识 基本概念:block是用来保存一段代码的:^:是bl ...

  3. 笔记-JavaWeb学习之旅8

    Window对象-定时器方法 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  4. nutzboot dubbo zookeeper简单使用

    提供方和消费方properties 配置基本差不多 nutz.application.name这个值不一样 提供方配置自动端口就行server.port=0 消费方一般需要对外提供web服务配置ip和 ...

  5. swiper 解决动态加载数据滑动失效的问题

    两种解决方法 第一种解决办法: success:function(result){ var resultdata =eval("("+result+")"); ...

  6. 从navicat for mysql导出数据库语句时应该加上的两条语句

    为了不引起编码问题,一般在从navict for mysql导出一个数据库时在文件最前面添加这2句语句: CREATE DATABASE IF NOT EXISTS `` default charac ...

  7. 图像分类丨浅析轻量级网络「SqueezeNet、MobileNet、ShuffleNet」

    前言 深度卷积网络除了准确度,计算复杂度也是考虑的重要指标.本文列出了近年主流的轻量级网络,简单地阐述了它们的思想.由于本人水平有限,对这部分的理解还不够深入,还需要继续学习和完善. 最后我参考部分列 ...

  8. myBati初学

    创建数据库(y2165) MyBatis环境搭建1.在pom.xml引入依赖2.得替换build节点,为了让程序编译在main中所有子包下的配置文件3.构建大配置,位于resources<?xm ...

  9. WebService_Demo

    简述 使用IDEA开发webservice服务,从零开始一步一步指引你. 服务端开发 首先创建一个webservice项目,如下图 创建完项目后idea会帮我们创建一个类,helloword,我们把它 ...

  10. sql server 日期 查询技巧

    CONVERT(varchar(100), SendTime, 23) –-sql里的字段SendTime参数 selectdateName(weekday,getDate());--返回当前星期 s ...