Related
In following contests:
每次询问要统计:编号落在 [x−D,x−1]、且重量 ≤wx−K 的工位数。重量不会改,所以可以离线处理。
把每个询问的阈值记成 wx−K,窗口记成 [L,R]。工位按重量从小到大排,询问按阈值从小到大排。用双指针把「重量已经不超过当前阈值」的工位插入树状数组,下标是工位编号。询问时查询 [L,R] 里已经插入的点数。
阈值 wx−K 可能为负,重量用 64 位整数存放。空窗口直接返回 0。
某分拣控制系统沿传送方向设置 n 个称重工位,编号 1∼n。工位 i 的重量为 wi(单位:克)。系统按规则查询某一工位的上游偏低计数。查询期间各工位重量保持不变。
查询工位 x 时,只统计其上游最近 D 个工位,即编号落在区间 [x−D,x−1] 内的工位。若 x−D<1,则左端取 1;若该区间为空,计数为 0。
在上述工位中,重量满足 wj≤wx−K 的,计入偏低。K=0 时,wj≤wx 均计入。
共 m 次查询,每次给出一个工位编号 x。
第一行四个整数 n、m、D、K。
第二行 n 个整数 w1,w2,…,wn。
接下来 m 行,每行一个整数 x,表示查询工位 x。
1≤n,m≤105
0≤D≤n
0≤K≤109
1≤wi≤109
1≤x≤n
对每次查询,输出一行一个整数:工位 x 的上游偏低工位个数。
输入
5 4 2 1
10 8 9 5 7
3
5
4
1
输出
1
1
0
0
说明
D=2,K=1。重量为 10,8,9,5,7。
输入
4 3 3 0
6 6 4 6
4
2
1
输出
3
1
0
说明
D=3,K=0,重量相等亦计入。重量为 6,6,4,6。
In following contests:
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册