题意: 给你一个排列,有2*n-1个元素,现在进行以下的操作: 每一次将a[i]替换成为a[i-1],a[i],a[i+1]三个数的中位数,并且所有的操作是同时进行的,也就是说这一次用于计算的a[],是这一次计算之前的那个a[].每一次不操作开头和结尾的两个位置.这样子每一次都会减少2个元素,问你最后剩下的元素是什么. 数据范围: 1<=N<=10^5 思路: 看见这道题正解是二分的时候,简直震惊!(考试的时候一直想的是计算每一项在最终序列中的系数来做). 我们可以二分出一个值x,将所有小于等…
闲扯 今天模拟的题,应该是挺简单的二分和贪心,就是没想出来,我好弱啊 顺便ORZ聚聚BLUESKY007,踩爆我了 思路 今天发现中位数性质如此优秀 二分最后塔顶的数,大于等于它的数变为1,小于它的数变为0,然后发现当有两个相邻的0或1在一起的时候,就会不会被去掉,会向上移动,利用这个性质,可以搞出快速判断的方法 就是找到距离中轴线最近的连续两个0或1,如果是0,就证明小于它的数在塔顶,否则证明大于等于它的数在塔顶,然后二分 注意判断没有任何一组的情况(即01相间),此时最边缘的会在顶端,特判一…
Description 题目大意:给你一个长度为n*2-1的排列,将除了该序列头尾的两个数外的其他数(设为i)变为原序列i-1,i,i+1下标数的中位数.求最后的数是什么.例子如下: Solution 这道题我们考虑二分(反正我YY了好久也没想出其他做法). 我们设当前二分到k,要判断答案与k的大小关系.将原排列中<=k的数设为0,反之设为1. 如此我们可以得到一个01序列. 通过分析可得,假如01序列中有两个相邻的数相等,则它们正上方的所有数都与它们相等.(我们可以称之为柱子) 1 _ 1 1…
B - Median Pyramid Easy Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Statement We have a pyramid with N steps, built with blocks. The steps are numbered 1 through N from top to bottom. For each 1≤i≤N, step i consists of 2i−1 bl…
无论再来多少次也不可能想到的写法. 二分一个最小的顶端值\(k\),大于设为\(1\)小于等于设为\(0\),可以证猜出来(你跟我说这可以?)如果存在两个连在一起的0/1那么它们会一直往上跑,还可以很容易就想到(容易?????)如果不存在相邻的情况(也就是交叉的那种)那么顶端答案一定是原先左右两边的值之一.. 不管了弃疗了.放代码. #include <bits/stdc++.h> using namespace std; const int N = 200010; int n, a[N &l…
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…
正解:构造 解题报告: 传送门$QwQ$ 考虑如果有两个相邻格子是相同数字那么它们以上这两列就都会是这列数字(显然$QwQ$? 所以考虑只要构造出第$n-1$行的中心和中心右侧($or$左侧一样的$QwQ$都等于$x$,其他格子随便填就成鸭$QwQ$ 然后就做完辣?记得分类讨论几个特殊情况嗷$QwQ$ $over$ #include<bits/stdc++.h> using namespace std; #define il inline #define gc getchar() #defin…
Atcoder 题面传送门 & 洛谷题面传送门 u1s1 Atcoder 不少思维题是真的想不出来,尽管在 Atcoder 上难度并不高 二分答案(这我倒是想到了),检验最上面一层的数是否 \(\ge x\). 我们将最底下一层的数中 \(\ge x\) 的 \(a_i\) 设为 \(1\),\(<x\) 的设为 \(0\),那么原题可以转化为每次操作对于相邻三个数,如果 \(1\) 的个数 \(\ge 2\),就在该位上填一个 \(1\),否则在该位上填一个 \(0\),求最终顶上的数是…
需要一点灵感的题目. 可以发现这样一个事情,当三个数中有两个数相同时,中为数一定是这两个相同的数. 基于这个观察,我们想让每一行都存在这样两个相同的两个数,就一定能保证第一层的值为 \(x\) 了. 继续观察可以发现,这样两个相同的数需要紧挨在一起,否则不能保证上面也存在两个相同的 \(x\). 那么对于两个在 \(p, p + 1\) 的相同数 \(x\),必然能使得下一层的 \(p - 1, p\) 也均为 \(x\)(当 \(p - 1, p\) 在下一层的状态下存在时). 那么我们的目标…
题目链接:戳我 一看范围1e5,往二分上想. 可是再怎么也没有想到这个神仙的二分答案qwq 我们二分一个数x,设比他大的数为1,小于等于他的数为0.那么我们就可以把原来的那个转化成一个01塔. 然后我们可以通过实验发现,如果有连续的0或者1的话,它一定会向上面推进一格qwqwq.然后谁最先占领最上面的那个格子--如果是1,就是当前枚举的答案小了,反之则大. 所以我们直接寻找哪个连续两个或以上的数离中轴线更近qwq即可. 这样子时间复杂度是木有问题,二分一个log,查询的话最劣也是O(n). 但是…