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 ...
随机推荐
- lvm 磁盘扩容
LVM磁盘管理 一.LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现.LVM将一个或多个硬盘 ...
- Java接口自动化测试实战笔记
综述 代码管理工具Git 测试框架 TestNG 测试报告 Mock 接口框架 HTTP 协议接口 测试框架 HttpClient SprintBoot 自动化测试开发 数据持久层框架 MyBatis ...
- Java的动态代理Proxy
概念梳理: 1.什么是动态代理? 答:动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实.代理一般会实现它所表示的实际对象的接口.代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际 ...
- 理解 TCP/IP 三次握手与四次挥手
TCP建立连接为什么是三次握手,而不是两次或四次? TCP,名为传输控制协议,是一种可靠的传输层协议,IP协议号为6. 顺便说一句,原则上任何数据传输都无法确保绝对可靠,三次握手只是确保可靠的基本需要 ...
- 【记录】MongoDB
什么情况建议使用MongoDB? 1:满足对数据库的高并发读写 2:对海量数据的高效存储和访问 3:对数据库高扩展性和高可用性 4:灵活的数据结构,满足数据结构不固定的场景 5:应用需要2000-30 ...
- Codeforces 356D 倍增优化背包
题目链接:http://codeforces.com/contest/356/problem/D 思路(官方题解):http://codeforces.com/blog/entry/9210 此题需要 ...
- Vue-cli使用prerender-spa-plugin插件预渲染和配置cdn
参考:https://www.jianshu.com/p/6a4c0b281e7f 使用vue-cli打包项目一般为spa项目,众所周知单页面应用不利于SEO,有ssr和预渲染两种解决方案,这里我们只 ...
- SVN连接不上仓库,问题之一
如果之前用过SVN,在新的地址上用,发现一直连不上,报错.有可能是因为默认使用了之前的地址,所以没弹出输账号和密码的弹框. 解决方法就是:把之前的链接地址全部清除掉. 右键找到SVN里面的 Sett ...
- IDEA使用Maven搭建JavaWeb项目
1. 新建项目 2. 填写项目坐标信息 3. 手动生效pom.xml 4. 添加maven常用配置 1) 设置项目统一编码 <!-- 设置编码 --> <properties> ...
- makefile 中的patsubst
1. wildcard:扩展通配符 2. notdir:去除路径 3. patsubst:替换通配符 若有一个makefile如下: src=$(wildcard *.c ./sub/*.c) dir ...