CF1886

A

分类讨论。

B

二分。

C

题意:给定一个字符串 s。记 si 为将 s 删去 i 个字符,使得剩余字符串字典序最小得到的字符串。令 S=s0+s1++ssz1。现在要询问 S[pos] 是哪个字符。

通过一些取模,加减可以求出,我们是要求 sx 的第 y 个字符。

要字典序最小,显然应该删去最靠前的,比后一个字符大的字符。

这个操作类似单调栈,我们就按单调栈依次加入字符,如果栈顶比现在的大,就 pop,同时记录删去了多少个字符。

D

一个字符串 s,初始为空。将 1n 按某种顺序加入一个序列中,除了第一个元素外,执行以下操作:

  1. 如果新加入元素是最小值,在 s 末尾加一个 <

  2. 是最大值,加一个 >

  3. 否则加一个 ?

现在告诉你最后的 s,你需要回答有多少种加入顺序能满足 s。另外,还有 m 次单点修改,每次将 s 的一个字符改成 >,<,? 中一个。需要在每次修改后都回答一次答案。

将加入序列反过来,看作在 1n 中删除元素。发现如果是 >,<,只有一种方案;而 ? 的方案数就是当前个数 - 2。所以若 si=?,则 ans×(i1) 即可。

还有个问题:若 s1=?ans=0。所以还需要记录 ans2s2n 的答案。

E

posted @   FLY_lai  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示