Related
In following contests:
区间里要恰好有 K 张取件牌。牌与牌之间若还夹着别的牌,张数就会超过 K,所以候选只可能是从左到右连续的 K 张牌。把这段的左右端点再向外扩到空挂钩上,牌数和种类都不变,长度只会变大。因此最短区间就是这 K 张牌自己的挂钩跨度。
设这 K 张牌的挂钩编号是 pj,pj+1,…,pj+K−1,长度是 pj+K−1−pj+1。空挂钩会计入这个长度,但种类只看牌上的数字,0 不是包裹种类。
种类数用长度为 K 的滑动窗口维护:
小区门岗有一排取件挂钩,从左到右编号 1∼n。第 i 个挂钩上的记录是整数 ai:ai=0 表示空挂钩,ai≥1 表示挂着一张取件牌,取件牌上的数字表示包裹种类。
挂着取件牌的挂钩一共 m 个,编号 p1,p2,…,pm 严格递增。数据保证这些位置上的 apj≥1,其余位置都是 0。只有这些取件牌算标记,种类就是 apj。空挂钩不计入标记,上面的 0 也不算一种包裹种类。
管理员要选一段连续挂钩 [L,R](1≤L≤R≤n),同时满足下面两条:
区间长度是 R−L+1。空挂钩同样占长度。请输出最短长度。若不存在这样的区间,输出 −1。
第一行四个整数 n、m、K、D。
第二行 n 个整数 a1,a2,…,an。
第三行 m 个整数 p1,p2,…,pm。
1≤n≤105
1≤m≤n
1≤K≤m
1≤D≤K
0≤ai≤109
1≤p1<p2<⋯<pm≤n
apj≥1,且 i 不在 p1,…,pm 中时 ai=0
输出一个整数,为满足条件的最短区间长度。若不存在,输出 −1。
输入
11 5 3 2
0 1 1 0 2 1 0 0 0 0 3
2 3 5 6 11
输出
4
说明
取件牌在挂钩 2,3,5,6,11,种类依次是 1,1,2,1,3。区间内要恰好有 3 张牌,且至少有 2 种。
任意 3 张牌如果在位置上不连续,中间就会夹着别的牌,张数会超过 3。所以只要检查从左到右连续的 3 张牌,再把区间两端收到这 3 张牌上:
三段都满足种类数,最短长度是 4。
区间 [2,6] 含有 4 张牌,张数不是 3,不能选。区间 [1,5] 仍然只有挂钩 2,3,5 这 3 张牌,长度却是 5,比 4 更长。
输入
8 5 3 3
5 5 0 6 0 0 6 7
1 2 4 7 8
输出
-1
说明
取件牌在 1,2,4,7,8,种类依次是 5,5,6,6,7。恰好 3 张牌时,只能是下面三组连续的牌:
三组的种类数都小于 3。
区间 [1,8] 的种类是 5,6,7,有 3 种,但取件牌有 5 张,不是恰好 3 张,不能选。因此没有合法区间,输出 −1。
In following contests:
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册