为了不断优化推荐效果,今日头条每天要存储和处理海量数据。假设有这样一种场景:我们对用户按照它们的注册时间先后来标号,对于一类文章,每个用户都有不同的喜好值,我们会想知道某一段时间内注册的用户(标号相连的一批用户)中,有多少用户对这类文章喜好值为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)