首页 > 其他分享 >Atcoder Beginner Contest 299 G

Atcoder Beginner Contest 299 G

时间:2023-04-23 13:33:08浏览次数:63  
标签:Atcoder Beginner ... 队列 元素 最小值 移除 序列 299

对于要打印的 \(B\),我们首先尝试确定 \(B_1\)。

让 \(f(x) (1≤x≤M)\) 是最大的 \(i\),使 \(A_i = x\)。
对于 \(r:=\underset{{{1≤x≤M}}}{\min}f(x)\),我们可以证明 \(B_1\) 是 \(A_1 ,A_2 ,...,A_r\) 中的一个(否则,\(B\) 是 \(A_{>r} :=(A_r+1 ,Ar+2,...,A_N)\)的一个子序列,但 \(A_{>r}\) 不包含 \(A_r\),这违反了 \(B\) 的条件)。

相反,存在一个长度为 \(M\) 的子序列,其第一个元素是 \(A_i\) 中的一个 \((1≤i≤r)\),它分别包含 \(1,2,...,M\) 一次。特别是,所有 \(A_{f(x)}\) 的子序列的 \(x\) 都有 \(x \neq A_i\)。

因此,\(B_1 =A_l = \underset{1≤i≤r}{\min}A_i\)。我们可以让 \(l\) 是最小的整数 \(j\),使\(A_j=\underset{1≤i≤r}{\min}A_i\)。

我们可以通过对以下序列重复类似的问题来确定\(B\)的所有元素(对元素进行适当的替换):

从 \(A\) 中除去前 \(l\) 项和所有使 \(A_i =B_1\) 的元素而得到的序列。
对一个序列的操作可以用一个优先级队列或一个段树来模拟。

在使用优先级队列管理 \((A_i ,i)\) 的情况下,我们可以通过把前r个词放在一起并找到它们的最小值来找到前 \(r\) 个元素的最小值。
移除 \(A\) 的前 \(l\) 个元素,并移除与某物相同的 \(A_i\),可以通过重复从优先级队列中移除一个元素来实现,只要队列中的顶级元素满足一个条件。
在段树的情况下,我们也可以做类似的事情。

移除与某事物具有相同价值的 \(A_i\),可以通过替换该 \(A_i\) 来实现。 删除时用 \(∞\) 来实现。
替换后,前 \(r\) 个元素的最小值是一个分段最小值。
这两种方法的时间复杂度都是 \(O(N\log{N})\),足够快。

Translated by Empty_Dream

标签:Atcoder,Beginner,...,队列,元素,最小值,移除,序列,299
From: https://www.cnblogs.com/yh2021shx/p/ABC-299-G-Solution.html

相关文章

  • AtCoder Beginner Contest 283 Ex Popcount Sum
    洛谷传送门AtCoder传送门记录一下这个神奇的套路。首先有\(\operatorname{popcount}(n)=n-\sum\limits_{i=1}^{\infty}\left\lfloor\frac{n}{2^i}\right\rfloor\)。证一下:\[\operatorname{popcount}(n)=\sum\limits_{i=0}^{\infty}\left\lfloor\dfrac{n}{2^i}\right......
  • AtCoder Regular Contest 115 D Odd Degree
    洛谷传送门AtCoder传送门若连通块是一棵树,考虑钦定\(k\)个点为奇度点,方案数为\(\binom{n}{k}\)。对于叶子,如果它是奇度点,那么连向它父亲的边要保留,否则不保留。这样自底向上考虑,任意一条边的保留情况都可以唯一确定,所以最后方案数就是\(\binom{n}{k}\)。若连通块存在环,仍......
  • AtCoder Regular Contest 114 F Permutation Division
    洛谷传送门AtCoder传送门这题居然是之前某场模拟赛(contest701)的T1……(@Vidoliga场切但是被卡常/bx)下面记\(m\)为原题面中的\(K\),\(a_i\)为原题面中的\(P_i\)。不难发现后手的策略是把所有段按照段的第一个数从大到小排序接在一起。考虑若\(a_1\lem\),则先手能把所......
  • AtCoder Regular Contest 114 D Moving Pieces on Line
    洛谷传送门AtCoder传送门挺有意思的题。首先显然地,一个棋子不会走回头路。于是一个棋子沿着边走的效果就是区间异或。更进一步,设\(s_i\)为\(i-1\toi\)的边颜色与\(i\toi+1\)的边颜色是否相同(差分),相当于对于每个\(i\)都选择\(s_{a_i}\)和\(s_{x_i}\),将它们异或......
  • Atcoder Beginner Contest 298---E
    题目:E-UnfairSugoroku(atcoder.jp)分析:这题状态转移方程挺好推的,但是用dp解是我没想到的dp[i][j][0]表示T在i点,A在j点且轮到T走时赢的概率dp[i][j][1]表示T在i点,A在j点且轮到A走时赢的概率代码:#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#def......
  • AtCoder Regular Contest 109 F 1D Kingdom Builder
    洛谷传送门AtCoder传送门考虑判断一个终止态是否可达。如果只有一个棋子连续段那一定可达;否则就存在\(\ge2\)个连续段。此时把放棋子看成删除,那么限制就是如果删除一个孤立的棋子(两边没有棋子)且还有别的格子有棋子,这个棋子的颜色异于其他连续段的两边棋子的颜色。设第一......
  • AtCoder Beginner Contest 298
    A-JobInterview#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn; strings; cin>>n>>s; if(s.find("x")!=-1){ printf("No\n"); }elseif(s.find("o")==-1){ printf("No......
  • Atcoder Regular Contest 118 E - Avoid Permutations(容斥+DP)
    挺套路的DP。第一步是显然的:转换贡献体,DP一条从\((0,0)\)到\((n+1,n+1)\)的路径,然后计算有多少个排列满足这条路径不经过任何一个\((i,p_i)\)。正着统计肯定不好求,考虑容斥。即我们钦定一些路径上的点,满足这些点必须对应某个\((i,p_i)\),然后计算有多少个\(p\)符合这个......
  • AtCoder Regular Contest 109 E 1D Reversi Builder
    洛谷传送门AtCoder传送门考虑固定\(s\)和每个格子的颜色,最终有多少个石子被染黑。结论:任何时刻只有不多于两个极大同色连通块。证明:设\([x,y]\)为当前的黑连通块,\([y+1,z]\)为白连通块。如果下一次染\(x-1\),若\(x-1\)为白,则\([x-1,z]\)都被染为白;否则\(x-1\)被......
  • AtCoder Regular Contest 109 D L
    洛谷传送门AtCoder传送门这种题根本做不出来……考虑一个L形怎么方便地表示出来。可以发现对于组成L形的三个点\((x_1,y_1),(x_2,y_2),(x_3,y_3)\),只要知道\(x=x_1+x_2+x_3\)和\(y=y_1+y_2+y_3\),就能确定三个坐标。证明是设折点坐标为\((p,q)\),则其余两......