题目链接:戳我

一看范围1e5,往二分上想。

可是再怎么也没有想到这个神仙的二分答案qwq

我们二分一个数x,设比他大的数为1,小于等于他的数为0。那么我们就可以把原来的那个转化成一个01塔。

然后我们可以通过实验发现,如果有连续的0或者1的话,它一定会向上面推进一格qwqwq。然后谁最先占领最上面的那个格子——如果是1,就是当前枚举的答案小了,反之则大。

所以我们直接寻找哪个连续两个或以上的数离中轴线更近qwq即可。

这样子时间复杂度是木有问题,二分一个log,查询的话最劣也是O(n)。

但是有一种例外,就是01交替分布,不存在两个或以上连续的。那我们就查不到了!

不过没有关系,这种特判一下即可。第一个是0的话最终上面的就是0,第一个是1的话最终就是1。(为什么?手动绘图一下即可)

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 200010
using namespace std;
int n,l,r,mid;
int a[MAXN];
inline bool check_large(int x,int y)
{
if(a[x]>mid&&a[y]>mid) return true;
return false;
}
inline bool check_small(int x,int y)
{
if(a[x]<=mid&&a[y]<=mid) return true;
return false;
}
inline bool solve()
{
for(int i=0;i<n-1;i++)
{
if(check_large(n+i,n+i+1)||check_large(n-i,n-i-1)) return true;
if(check_small(n+i,n+i+1)||check_small(n-i,n-i-1)) return false;
}
if(a[1]<=mid) return false;
else return true;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n*2-1;i++) scanf("%d",&a[i]);
l=1,r=2*n-1;
while(l<r)
{
mid=(l+r)>>1;
if(solve()==true) l=mid+1;
else r=mid;
}
printf("%d\n",l);
return 0;
}

小蒻菜实在是没有想到这种神仙做法,表示自己还是太菜了qwqwq

AT2165 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. AGC006D Median Pyramid Hard

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

  5. [agc006D]Median Pyramid Hard-[二分+乱搞]

    Description 题目大意:给你一个长度为n*2-1的排列,将除了该序列头尾的两个数外的其他数(设为i)变为原序列i-1,i,i+1下标数的中位数.求最后的数是什么.例子如下: Solution ...

  6. [AGC006] D - Median Pyramid Hard 二分

    Description ​ 现在有一个NN层的方块金字塔,从最顶层到最底层分别标号为1...N1...N. ​ 第ii层恰好有2i−12i−1个方块,且每一层的中心都是对齐的. 这是一个N=4N=4的 ...

  7. [AGC06D] Median Pyramid Hard (玄学)

    Description 现在有一个N层的方块金字塔,从最顶层到最底层分别标号为1...N. 第i层恰好有2i−1个方块,且每一层的中心都是对齐的. 这是一个N=4的方块金字塔 现在,我们首先在最底层填 ...

  8. $AT2163\ Median\ Pyramid\ Easy$ 构造

    正解:构造 解题报告: 传送门$QwQ$ 考虑如果有两个相邻格子是相同数字那么它们以上这两列就都会是这列数字(显然$QwQ$? 所以考虑只要构造出第$n-1$行的中心和中心右侧($or$左侧一样的$Q ...

  9. [atAGC006D]Median Pyramid Hard

    二分答案,考虑答案是否会大于等于这个mid,显然所有数值分为两类:大于等于mid和小于mid将n个数转化为01串,如果0和1不相邻,那么答案就是第一个数/最后一个数(一定会相同),考虑有连续两个0/1 ...

随机推荐

  1. MaperReduce实验

    目录 MaperReduce实现WordCount程序二次排序 前期准备 1. 工程结构 2. 编写自定义NewKey类 3. 编写WCMapper类 4. 编写WCReduer类 5. 编写作业描述 ...

  2. 关于junit包导入不了但是maven本地库中却存在的问题

    导入项目的时候发现junit的类使用不了,于是就去看看包导入了没有 发现包是灰色的,于是猜想可能是maven本地库中包没下载过来 查询了本地库发现包是存在的,这就奇怪的,经过网上查询之后得到解决方案 ...

  3. hdu2516-取石子游戏 (斐波那契博弈)【博弈 二分查找】

    http://acm.hdu.edu.cn/showproblem.php?pid=2516 取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memor ...

  4. 这几天搞UNITY遇到的坑

    都是在IPHONE设备上遇到的,UNITY版本是5.4.4f1 1.EASY AR出现扫描蓝线绿块的,是因为不是EASY AR的CameraDeviceBehavior默认参数1280X720 2.自 ...

  5. 上传工程到github

    这里主要讲讲如何在mac底下使用github,我刚开始使用时,还是费了一点功夫的,因为网上的资料比较杂,有些不是太准确.故将自己的安装过程比较详细的分享下,方便有需要的人,攒点人品. 首先你得完成如下 ...

  6. Kubuntu上连接PPTP

    生活在天朝,如果没备几招FQ的本领,都不敢说自己还活着... 前两天从朋友那抢了个VPN帐号,使用的是PPTP的,在google上找了一会,发现网上大都是讲VPN服务搭建的,就算是介绍客户端的,也大都 ...

  7. jsp页面数据分页模仿百度分页效果

    <%@page import="web09.shop.DBUtil"%> <%@page import="java.sql.ResultSet" ...

  8. Linux cloc

    一.简介 cloc是一个基于perl的.十分好用的代码统计工具,它所支持的语言还算十分丰富.不过,还是有很多用的较少的语言是不支持的.   二.安装配置 1)官网安装教程 http://cloc.so ...

  9. 详解Python垃圾回收机制

    http://www.qytang.com/cn/list/28/417.htmhttp://www.qytang.com/cn/list/28/416.htmhttp://ww 引用计数 Pytho ...

  10. Part2_lesson4---ARM寻址方式

    所谓寻址方式就是处理器根据指令中给出的信息来找到指令所需操作数的方式. 1.立即数寻址 ADD R0,R0,#0x3f; R0<-R0+0x3f 在以上指令中,第二个源操作数即为立即数,要求以“ ...