DTOJ 4772. Befuddle

题意

Lyra 最近刚刚得到由小写字母构成的长度为 n n n 的字符串 s s s,下标为 [ 1 , n ] [1,n] [1,n]。 Evan 觉得传统的字符串询问 Lyra 都能轻松解决,于是给出了 m m m 个复杂的询问,每个询问包含五个参数 X , A , B , L , R X,A,B,L,R X,A,B,L,R,你需要找出原字符串的一个子串 t = s [ i , j ] t = s_{[i,j]} t=s[i,j],满足 t t t [ L , R ] [L,R] [L,R] 区间内,长度在 [ A , B ] [A,B] [A,B] 区间内,包含恰好 X X X 种不同的字符。如果有这样多个 i , j i,j i,j,输出 i i i 最小的那个,若仍有多个 j j j 满足条件,选择最小的 j j j,无解输出 − 1 , − 1 −1,−1 1,1

对于全部数据, 1 ≤ n , m ≤ 1 0 5 , 1 ≤ L ≤ R ≤ n , 1 ≤ A ≤ B ≤ n , 1 ≤ X ≤ 26 1 \le n, m \le 10^5, 1 \le L \le R \le n, 1 \le A \le B \le n, 1 \le X \le 26 1n,m105,1LRn,1ABn,1X26

Subtask 1[6pts] n ≤ 100 n \le 100 n100

Subtask 2[9pts] n ≤ 1000 n \le 1000 n1000

Subtask 3[17pts] A = 1 , B = n A = 1,B = n A=1,B=n

Subtask 4[17pts] L = 1 , R = n L = 1, R = n L=1,R=n

Subtask 5[17pts] 所有询问的 X X X 都相等.

Subtask 6[34pts] 没有特殊限制

题解

思路比较清晰的一道数据结构题,原本想的方向也是对的,但以为限制有很多不可做,没有好好分析导致自闭。

首先对于每种 x x x分开做,显然每个起点到达的终点是一段连续区间(容易预处理)。
设每个点为 ( p , x , y ) (p,x,y) (p,x,y)表示起点在 p p p,终点在 [ x , y ] [x,y] [x,y],发现 x , y x,y x,y是随 p p p不降的。
于是对于每个询问 ( a , b , l , r ) (a,b,l,r) (a,b,l,r),相当于要求最小的 p p p,使得 m a x ( p + a − 1 , x ) ≤ m i n ( y , r , p + b − 1 ) max(p+a-1,x) \le min(y,r,p+b-1) max(p+a1,x)min(y,r,p+b1) l ≤ p l\le p lp
拆开后简化一下就是求 x − p + 1 < = b x-p+1<=b xp+1<=b y − p + 1 > = a y-p+1>=a yp+1>=a p ≤ x ≤ r p\le x\le r pxr的最小 p p p
对于 p ≤ x ≤ r p\le x\le r pxr可以利用 ( p , x , y ) (p,x,y) (p,x,y)的单调性二分得出 p p p的区间 ( L , R ) (L,R) (L,R),于是将询问按照 b b b升序,每个询问求区间内 a ≤ y − p + 1 a\le y-p+1 ayp+1的最小的 p p p,用线段树单点修改+区间二分即可维护。

原本还不太会证区间二分的效率,对于询问 ( a , b , x ) (a,b,x) (a,b,x),可以把 [ a , b ] [a,b] [a,b]分为 l o g log log个区间,只会在第一个有 ≥ x \ge x x的区间二分下去并且找到,所以效率就是一个 l o g log log了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值