Description

​ 现在有一个NN层的方块金字塔,从最顶层到最底层分别标号为1...N1...N。

​ 第ii层恰好有2i−12i−1个方块,且每一层的中心都是对齐的。

这是一个N=4N=4的方块金字塔

​ 现在,我们首先在最底层填入一个2N−12N−1的排列。之后,我们从i−1i−1层开始,逐步向上填入每一层的数。

​ 对于第ii(1≤i<N1≤i<N)层中位置为xx的方块,它的值为左下方、正下方和右下方的三个数的中位数。形式化地描述,就是i+1i+1层中x−1x−1、xx和x+1x+1三个位置的中位数。

​ 给定一个NN和长度为2N−12N−1的排列,请还原出最顶层唯一一个方块中的数值。

​ 下图就是一个还原的例子:

Input

​ 第一行一个正整数NN(2≤N≤1052≤N≤105)

​ 接下来一行有2N−12N−1个正整数a1,a2,...,a2N−1a1,a2,...,a2N−1,表示最底层的填数情况。保证aa是个排列。

Output

​ 只有一个正整数,表示最顶层那唯一一个格子里的数。

Sample Input

#Sample Input 1
4
1 6 3 7 4 5 2 #Sample Input 2
2
1 2 3

Sample Output

#Sample Output 1
4 #Sample Output 2
2

Sol

直接做显然是T的,我们考虑二分答案,二分之后把大于mid的置为1,其他置为0,然后从中间往两边判断,先出现俩连续0说明这个状态可行,否则不可行,如果没有连续数字的话直接判断第一位即可。

原因:两个连续相同的数字可以一直延伸到起点,而且水平距离近的优先。

Code

#include <cstdio>
int a[200005],n,ans;
bool dn(int x,int y,int z){return a[x]<=z&&a[y]<=z;}
bool up(int x,int y,int z){return a[x]>z&&a[y]>z;}
bool chk(int k)
{
for(int i=0;i<n-1;i++)
{
if(up(n-i,n-i-1,k)||up(n+i,n+i+1,k)) return 0;
if(dn(n-i,n-i-1,k)||dn(n+i,n+i+1,k)) return 1;
}
return dn(1,1,k);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<n*2;i++) scanf("%d",&a[i]);
for(int l=0,r=2*n-1,mid=(l+r)>>1;l<=r;mid=(l+r)>>1) if(chk(mid)) r=mid-1,ans=mid;else l=mid+1;
printf("%d\n",ans);
}

[AGC006] D - Median Pyramid Hard 二分的更多相关文章

  1. AT2165 Median Pyramid Hard 二分答案 脑洞题

    无论再来多少次也不可能想到的写法. 二分一个最小的顶端值\(k\),大于设为\(1\)小于等于设为\(0\),可以证猜出来(你跟我说这可以?)如果存在两个连在一起的0/1那么它们会一直往上跑,还可以很 ...

  2. B - Median Pyramid Easy 构造题

    B - Median Pyramid Easy Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Statemen ...

  3. 【AtCoder】【模型转化】【二分答案】Median Pyramid Hard(AGC006)

    题意: 给你一个排列,有2*n-1个元素,现在进行以下的操作: 每一次将a[i]替换成为a[i-1],a[i],a[i+1]三个数的中位数,并且所有的操作是同时进行的,也就是说这一次用于计算的a[], ...

  4. Atcoder Grand Contest 006 D - Median Pyramid Hard(二分+思维)

    Atcoder 题面传送门 & 洛谷题面传送门 u1s1 Atcoder 不少思维题是真的想不出来,尽管在 Atcoder 上难度并不高 二分答案(这我倒是想到了),检验最上面一层的数是否 \ ...

  5. hdu 5432 Pyramid Split 二分

    Pyramid Split Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/conte ...

  6. AtCoder - 4351 Median of Medians(二分+线段树求顺序对)

    D - Median of Medians Time limit : 2sec / Memory limit : 1024MB Score : 700 pointsProblem Statement ...

  7. AtCoder Regular Contest 101 (ARC101) D - Median of Medians 二分答案 树状数组

    原文链接https://www.cnblogs.com/zhouzhendong/p/ARC101D.html 题目传送门 - ARC101D 题意 给定一个序列 A . 定义一个序列 A 的中位数为 ...

  8. AGC006D Median Pyramid Hard

    闲扯 今天模拟的题,应该是挺简单的二分和贪心,就是没想出来,我好弱啊 顺便ORZ聚聚BLUESKY007,踩爆我了 思路 今天发现中位数性质如此优秀 二分最后塔顶的数,大于等于它的数变为1,小于它的数 ...

  9. Median(vector+二分)

    Median Time Limit: 5 Seconds Memory Limit: 65536 KB The median of m numbers is after sorting them in ...

随机推荐

  1. 南京邮电大学网络攻防平台WEB题

    平台地址:http://ctf.nuptsast.com/ 签到题: 右键查看源代码,得到flag md5 collision: 传入的a的md5值要为0e开头的,但不能是QNKCDZO,百度一个0e ...

  2. oracle10g Error in invoking target 'install' of makefile

    oracle10g series error error in invoking target 'install' of makefile /u01/app/oracle/oracle/product ...

  3. Android 4 学习(13):Local Broadcast Manager & Intent Filter

    参考<Professional Android 4 Development> Local Broadcast Manager 简介 Local Broadcast Manager由Andr ...

  4. ARM六种寻址方式的汇编实现

    AREA Example,CODE,READONLY ENTRY CODE32 ;S 后缀:更新标志位CPSR ;!后缀:基址寄存器中的地址发生变化 ;LDR 从存储器中加载数据到寄存器 ;STR 从 ...

  5. delphi 在桌面屏幕上模拟鼠标单击

    delphi 在桌面屏幕上模拟鼠标单击 procedure TFrmUnicom.Button1Click(Sender: TObject); var oldPoint, newPoint: TPoi ...

  6. 《转》我的ARM学习经历

    1.基础阶段     话说06年第一份工作从事的是PLC开发,用protel画原理图和PCB,写AVR单片机程序,焊焊板子,还去过华强北买器件,比较杂,但是接触面比较广,为进一步学ARM打下了基础. ...

  7. 【HDU4970】Killing Monsters

    题意 数轴上有n个点,有m座炮塔,每个炮塔有一个攻击范围和伤害,有k个怪物,给出他们的初始位置和血量,问最后有多少怪物能活着到达n点.n<=100000 分析 对于某个怪物,什么情况下它可以活着 ...

  8. 使用laravel实现用户的登陆

    首先在 php artisan 里面 make:auth 生产一个门脸类 修改配置文件里面要哪个模型登陆 模型得继承一下才能 先写一下注册 密码必须要使用laravel的加密方法,使用MD5都没用 l ...

  9. 卡尔曼滤波总结——KF、EFK、UKF

    1.用途 现实是我们的处理和测量模型都是非线性的,结果就是一个不规则分布,KF能够使用的前提就是所处理的状态是满足高斯分布的,为了解决这个问题,EKF是寻找一个线性函数来近似这个非线性函数,而UKF就 ...

  10. js 操作table

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default4.aspx.cs ...