CF1220F
CF1220F
把整棵树分成1的左边和1的右边两部分
最优情况两边子树深度的差一定可以是一
如果还可以是2,也可以通过把多的那一边的点往另一边移使他变成1
如果往一个端点加点,一定不会使这一边变优,也不会使另一边变劣
所以可以二分去找这个区间
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int M = 2000011*2;
int n,m,k,a[M/4],mn[M],pos1,pos2;
void built(int now,int l,int r)
{
if(l==r)
{
mn[now]=l;
return ;
}
int mid=(l+r)>>1;
built(now*2,l,mid); built(now*2+1,mid+1,r);
if(a[mn[now*2]]<a[mn[now*2+1]]) mn[now]=mn[now*2];
else mn[now]=mn[now*2+1];
}
int ask(int now,int l,int r,int L,int R)
{
if(l>=L && r<=R) return mn[now];
int mid=(l+r)>>1,tmp=0,k;
if(L<=mid) tmp=ask(now*2,l,mid,L,R);
if(R>mid)
{
k=ask(now*2+1,mid+1,r,L,R);
if(!tmp || a[k]<a[tmp]) tmp=k;
}
return tmp;
}
int dfs(int l,int r)
{
if(l>r) return 0;
if(l==r) return 1;
int x=ask(1,1,n+n+n,l,r);
return max(dfs(l,x-1),dfs(x+1,r))+1;
}
int check(int l,int r)
{
int x;
if(r>=pos2) x=pos2;
else x=pos1;
int y=dfs(l,x-1)-dfs(x+1,r);
return y;
}
int main()
{
scanf("%d",&n); memset(mn,0x3f,sizeof(mn));
for(int i=1;i<=n;i++) scanf("%d",&a[i]),a[i+n]=a[i+n+n]=a[i];
for(int i=1;i<=n;i++) if(a[i]==1) pos1=i, pos2=i+n;
built(1,1,n+n+n);
int l=pos1,r=pos2-1,mid,tmp=0;
while(l<=r)
{
mid=(l+r)>>1;
if(check(mid,mid+n-1)>=0) tmp=mid, l=mid+1;
else r=mid-1;
}
printf("%d %d",dfs(tmp,tmp+n-1),(tmp-1)%n);
}
CF1220F的更多相关文章
- 单调栈+线段树——cf1220F
首先考虑初始排列,pi会让周围所有比其大的元素深度+1,所以要求每个点的深度,只要其被覆盖了几次即可 这个覆盖可以通过处理每个元素的左右边界(单调栈O(n))+线段树区间更新(Ologn(n))来做 ...
- 在$CF$水题の记录
CF1158C CF1163E update after CF1173 很好,我!expert!掉rating了!! 成为pupil指日可待== 下次要记得合理安排时间== ps.一道题都没写的\(a ...
随机推荐
- 插件化框架解读之android系统服务实现原理(五)
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 一.系统服务提供方式 1.我们平时最常见的系统服务使用方式 Wi ...
- Docker入门 .Net Core 使用Docker全程记录
https://www.cnblogs.com/flame7/p/9210986.html Docker入门 第一课 --.Net Core 使用Docker全程记录 微服务架构无疑是当前最火热的 ...
- CentOS使用手册(一)
前言:全栈开发当然少不了服务器的配置与维护,本次打算参考网上资料和大地老师的视频写一个CentOS系列的手册,方便日后查阅. 本篇目录: 1.虚拟机上的CentOS基本安装流程 2.远程连接Linux ...
- html input标签 要求只能输入纯数字
在input标签添加以下代码即可 oninput = "value=value.replace(/[^\d]/g,'')" <input type="text&qu ...
- webpack插件之html-webpack-plugin
官方文档:https://www.npmjs.com/package/html-webpack-plugin html-webpack-plugin 插件专门为由webpack打包后的js提供一个载体 ...
- windows开机自启mysql服务(任务计划程序+XAMPP)
需求:windows开机自启mysql服务 的需求: 相关工具:win10系统中,使用windows自带的任务计划程序 和 XAMPP软件 完成此需求 XAMPP软件介绍:此软件维护了windows中 ...
- centos7下的Firewalld
一.介绍 防火墙守护 firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口.它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 ...
- mysql优化的理解(转载)
当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这 ...
- 编译lineageos3
待更 上次尝试将小米开源的内核Xiaomi_Kernel_OpenSource升级到最新版本,花了几天时间解决lineageos编译报错 最后总算成功编译出镜像文件了 but twrp刷入镜像在启动界 ...
- Android 编译笔记20191205
gradle下载很慢 解决问题的方法如下: 使用文件管理器 打开用户主目录 windows平台: c:\Users\用户名\.gradle macos平台: /Users/用户名/.gradle li ...