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 ...
随机推荐
- bstToDoublyList
bstToDoublyList */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839496;} ...
- windows修改docker的默认存放位置
docker默认存储到c盘,我需要移动到其他盘. 参考了网上很多资料,结果要么移动不了,要么重启docker就回到c盘了. 最后参考docker的官方论坛,找到了解决方案.https://forums ...
- ollvm 新增字符串加密功能
好久没弄ollvm了,可以继续了,今天给ollvm新增了一个pass,用来加密字符串,这个pass是从别的库里面扒出来的. 本文是基于在Windows 上使用VS2017编译出来的ollvm,在这个基 ...
- 轻松上手nodeJs爬取想要页面的数据
开始之前请先确保自己安装了Node.js环境!!!!!!!! 1.在项目文件夹安装两个必须的依赖包 npm install superagent -S SuperAgent(官网是这样解释的) --- ...
- elasticsearch Java High Level REST 相关操作封装
pox.xml文件添加以下内容 <dependency> <groupId>org.elasticsearch.client</groupId> <artif ...
- springboot中xml配置之@ImportResource
springboot中进行相关的配置往往有java配置和xml配置两种方式. 使用java的方式配置只需要使用@configuration注解即可,而使用xml的方式配置的话需要使用@ImportRe ...
- 【转载】linux查看端口状态相关命令
具体命令移步:https://www.cnblogs.com/cxbhakim/p/9353383.html
- 你(可能)不知道的 web api
转自奇舞周刊 简介 作为前端er,我们的工作与web是分不开的,随着HTML5的日益壮大,浏览器自带的webapi也随着增多.本篇文章主要选取了几个有趣且有用的webapi进行介绍,分别介绍其用法.用 ...
- ERROR 2003 (HY000): Can't connect to MySQL server on '129.28.149.240' (111) mysql 无法远程连接
环境: ubuntu mysql 一. 查看端口 可以看到mysql监控的是本机Ip root@jiang:/etc/mysql/mysql.conf.d# netstat -apn|grep 33 ...
- C语言数组,指针小案例
/* ============================================================================ Name : hello.c Autho ...