为了不断优化推荐效果,今日头条每天要存储和处理海量数据。假设有这样一种场景:我们对用户按照它们的注册时间先后来标号,对于一类文章,每个用户都有不同的喜好值,我们会想知道某一段时间内注册的用户(标号相连的一批用户)中,有多少用户对这类文章喜好值为k。因为一些特殊的原因,不会出现一个查询的用户区间完全覆盖另一个查询的用户区间(不存在L1<=L2<=R2<=R1)。
为了不断优化推荐效果,今日头条每天要存储和处理海量数据。假设有这样一种场景:我们对用户按照它们的注册时间先后来标号,对于一类文章,每个用户都有不同的喜好值,我们会想知道某一段时间内注册的用户(标号相连的一批用户)中,有多少用户对这类文章喜好值为k。因为一些特殊的原因,不会出现一个查询的用户区间完全覆盖另一个查询的用户区间(不存在L1<=L2<=R2<=R1)。
输入: 第1行为n代表用户的个数 第2行为n个整数,第i个代表用户标号为i的用户对某类文章的喜好度 第3行为一个正整数q代表查询的组数 第4行到第(3+q)行,每行包含3个整数l,r,k代表一组查询,即标号为l<=i<=r的用户中对这类文章喜好值为k的用户的个数。 数据范围n <= 300000,q<=300000 k是整型
输出:一共q行,每行一个整数代表喜好值为k的用户的个数
5 1 2 3 3 5 3 1 2 1 2 4 5 3 5 3
1 0 2
样例解释: 有5个用户,喜好值为分别为1、2、3、3、5, 第一组询问对于标号[1,2]的用户喜好值为1的用户的个数是1 第二组询问对于标号[2,4]的用户喜好值为5的用户的个数是0 第三组询问对于标号[3,5]的用户喜好值为3的用户的个数是2
N=int(input())
s=list(map(int,input().split()))
user_dict={} #建立空的dict
for x in range(N):
if user_dict.__contains__(s[x]): #如果包含该key,则直接向value追加数据。value里面是list
user_dict[s[x]].append(x+1)
else:
user_dict[s[x]]=[x+1] #如果不包含该key,添加。
M=int(input())
for x in range(M):
[l,r,k]=list(map(int,input().split())) #边循环,边处理
result = 0
if user_dict.__contains__(k):
for y in user_dict[k]:
if l<=y<=r:
result+=1
print(result) n = int(input()) #这道题用暴搜肯定超时,但是用Python的字典会非常简单
user_array = list(map(int,input().strip().split()))
user_dict = dict() #创建一个字典
for i in range(len(user_array)): #对应的键值是用户喜爱程度,value值是一个列表,对应相应的用户id
if user_dict.__contains__(user_array[i]):
user_array_list_i = list(user_dict[user_array[i]])
user_array_list_i.append(i+1)
user_dict[user_array[i]] = user_array_list_i
else:
user_array_list_i = []
user_array_list_i.append(i+1)
user_dict[user_array[i]] = user_array_list_i
q = int(input())
for i in range(q):
query = list(map(int,input().strip().split()))
start_index = query[0]
end_index = query[1]
k = query[2]
if user_dict.__contains__(k):
query_list = user_dict[k] #通过键值找到这个喜爱程度对应所有的用户id
count = 0
for j in range(len(query_list)):
if start_index <= query_list[j] <= end_index:
count += 1
print(count)
else:
print(0)