bzoj5286 [Hnoi2018]转盘
题目描述:
题解:
看了半个晚上终于明白了。
首先最优决策一定有:在起始点停留一段时间然后一直前进。
解释网上有很多,在这里不赘述了。
(由于是环,先把$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]转盘的更多相关文章
- BZOJ5286: [Hnoi2018]转盘 (线段树)
题意 给你绕成一圈的物品共 \(n\) 个 , 然后从其中一个开始选 , 每次有两种操作 , 一是继续选择当前物品 , 二是选择这个后一个物品 . 选择后一个物品要求当前的时刻大于后一个的 \(T_i ...
- 【BZOJ5286】[HNOI2018]转盘(线段树)
[BZOJ5286][HNOI2018]转盘(线段树) 题面 BZOJ 洛谷 题解 很妙的一道题目啊.(全世界除了我这题都有40分,就我是一个状压选手 首先来发现一些性质,我们走一圈一定不会更差. 为 ...
- [BZOJ5286][洛谷P4425][HNOI2018]转盘(线段树)
5286: [Hnoi2018]转盘 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 15 Solved: 11[Submit][Status][Di ...
- 5286: [Hnoi2018]转盘
5286: [Hnoi2018]转盘 链接 分析: $\min\limits_{i=1}^n \{ \max\limits_{j=i}^{i + n - 1} \{ a_{j}+i \} \} +n- ...
- [HNOI2018]转盘
[HNOI2018]转盘 给你一个 \(n\) 元环, 你可以在 \(0\) 时刻从任意一个位置出发, 每一秒可以选择往后或者留在原地每个点有个参数 \(T_i\) , 当你走到 \(i\) 的时间 ...
- bzoj 5286: [Hnoi2018]转盘
Description Solution 首先注意到一个点不会走两次,只会有停下来等待的情况,把序列倍长 那么如果枚举一个起点\(i\),答案就是 \(min(max(T[j]+n-(j-i)-1)) ...
- BZOJ.5286.[AHOI/HNOI2018]转盘(线段树)
BZOJ LOJ 洛谷 如果从\(1\)开始,把每个时间\(t_i\)减去\(i\),答案取决于\(\max\{t_i-i\}\).记取得最大值的位置是\(p\),答案是\(t_p+1+n-1-p=\ ...
- [HNOI2018]转盘[结论+线段树]
题意 题目链接 分析 首先要发现一个结论:最优决策一定存在一种 先在出发点停留之后走一圈 的情况,可以考虑如下证明: 如果要停留的话一定在出发点停留,这样后面的位置更容易取到. 走超过两圈的情况都可以 ...
- 【比赛】HNOI2018 转盘
通过这题,我发现了我最大的缺陷,就是题目中重要的性质发现不了,所以导致后期根本做不了.还是要多做题,培养思维 对于这道题,来发现性质吧 对于每一条路线,因为它有用的就是最终的时刻,所以我们都可以把它变 ...
随机推荐
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 Session优缺点
● 数据存储在服务器,安全. ● session能保存Object类型数据,也就是说能存储任意数据. ● 可存储的数据大小,理论上是无限制的. ● 因为数据存储在服务器端,当用户比较多时,会占 ...
- Window 10 Alt Tap 切换窗口,设置成Windows 7风格
升级了Windows 10 以后,切换窗口非常的难受.新版的窗口切换的图标变成了窗口预览了,这总让我一瞬间找不到要去的窗口,所以我打算切换成Windows 7 的小图标风格. Windows + R ...
- Centos 5.11 升级 Openssl
由于Openssl版本较低,故此升级版本来解决一些小问题. 1:查看openssl版本: [root@server-008 ~]# openssl versionOpenSSL 0.9.8e-fips ...
- samba服务器实验指导
第一节.samba是干什么的?它有什么用? Samba(SMB是其缩写) 是一个网络服务器,它是Linux作为本地服务器最重要的一个服务,用于Linux和Windows共享文件之用:Samba可以用于 ...
- vs 对网站和项目使用IIS Express 的64位版
- C# 对DataTable中按条件进行筛选和更新。
当我们频繁的对数据库进行操作时,可能造成CPU使用率过高,这时我们可以先将数据表读取到DataTable,然后在必要的时候再更新到数据库中. 以下是DataTable中对数据的选择和更新操作.采用Da ...
- idea | 设置支持java8的lambda表达式
修改配置: setting: project structure:
- [POI2011]Plot
https://szkopul.edu.pl/problemset/problem/mzrTn1kzVBOAwVYn55LUeAai/site/?key=statement 既卡常又卡精度...真的A ...
- 前端开发---css样式的使用方式
css使用方式: 1.内联样式表: <body style="background-color:green" margin:0 ; padding:0;> 2.嵌入式样 ...
- 107 Binary Tree Level Order Traversal II 二叉树的层次遍历 II
给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 ...