CodeForces-374D Inna and Sequence

CodeForces-374D Inna and Sequence

tag: *2000;线段树

有一个比特串 \(w\),初始为空。给定 \(a_1,\cdots,a_m\),满足 \(1\le a_1<\dots<a_m\)。有三种操作:

  • 操作 \(-1\):令 \(k\) 为最大的满足 \(a_k\le|w|\)\(k\),从 \(w\) 中删去第 \(a_1,a_2,\cdots,a_k\) 个元素。注意:
    • \(a_1>|w|\),则无事发生;
    • 删除操作是同时进行的,一次性删除一轮之后才会更新下标。
  • 操作 \(0\):向 \(w\) 的末尾添加一个 \(0\)
  • 操作 \(1\):向 \(w\) 的末尾添加一个 \(1\)

给定 \(n\) 次操作,求最终的比特串 \(w\)。如果 \(w\) 最终为空,输出 Poor stack!\(1\le n,m,a_i\le10^6\)

序列删数问题。可以发现,最多向 \(w\) 中加入 \(10^6\) 个数,所以最多删 \(10^6\) 个数,因此我们 \(w\) 视为静态数组

用线段树维护下标区间内 \(w\) 中有多少个数。

  • 末尾加一个数:维护全局变量 \(p\) 表示当前共进行多少次加数操作,在 \(w_p\) 位置加数。
  • 删除第 \(k\) 个数:线段树二分。

时间线性对数。Submission #344431878 - Codeforces

posted @ 2025-10-23 16:40  f2021ljh  阅读(2)  评论(0)    收藏  举报