首页 > 试题广场 >

序列维护

[编程题]序列维护
  • 热度指数:6378 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小易在维护数据的时候遇到一个需求,具体来说小易有一系列数据,这些数据了构成一个长度为n的数字序列,接下来小易会在这个序列上进行q次操作。
每次操作有一个查询的数字x,小易需要将序列数据中所有大于等于x的数字都减一,并输出在本次操作中有多少个数字被减一了。
小易犯了难,希望你能帮帮他。

输入描述:
第一行n,q,表示数字个数和操作个数。 
接下来一行n个数表示初始的数字。
接下来q行,每行一个数,表示指定的数字x。


输出描述:
对于每个询问,输出一个数字表示答案
示例1

输入

4 3
1 2 3 4
4
3
1

输出

1
2
4
示例2

输入

3 2  
1 2 3    
3  
3

输出

1
0
随机生成几组数试了一下
import random import numpy as np
n=random.randint(1,20)
x=np.random.randint(1,10,random.randint(1,10))
s=np.random.randint(1,20,n) for i in x: print(len(s[s>=i]))
     s=np.where(s>=i,s-1,s)

发表于 2022-04-29 18:35:33 回复(0)
还是很懵,case通过为0,自测都没问题,是有bug吗
n,q= list(map(int, input().split(' ')))
lis=list(map(int, input().split(' ')))
lis.sort(reverse=True)
while q:
    q = q-1
    val = int(input())
    num=0
    ma=lis[0]
    i=0
    while (ma>=val)&(i<n):
        lis[i]=;lis[i]-1
        num=num+1
        i=i+1
        if i<n:
            ma=lis[i]
    print(num)

发表于 2020-08-07 16:18:07 回复(0)