为了不断优化推荐效果,今日头条每天要存储和处理海量数据。假设有这样一种场景:我们对用户按照它们的注册时间先后来标号,对于一类文章,每个用户都有不同的喜好值,我们会想知道某一段时间内注册的用户(标号相连的一批用户)中,有多少用户对这类文章喜好值为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
public static void main(String[] args) { Scanner sc = new Scanner(System.in); int peoplenum = sc.nextInt(); Map<Integer, List<Integer>> map = new HashMap<>(); /** * 输入的时候会出现不同的用户数会出现相同的关注度 * 所以map这样可以自动分出不同关注度分别又多少关注度 */ for (int i = 1; i <= peoplenum; i++) { int guanzhudu = sc.nextInt(); if (!map.containsKey(guanzhudu)) { List<Integer> list = new ArrayList<>(); list.add(i); map.put(guanzhudu, list); } else { List<Integer> list = map.get(guanzhudu); list.add(i); } } int num = sc.nextInt();//查询组数 // List<chaxun> list=new ArrayList<>(); // for (int i=0;i<num;i++){ // list.add(new chaxun(sc.nextInt(),sc.nextInt(),sc.nextInt())); // } // for (int i=0;i<num;i++){ // int c=Fun(list,i,map); // System.out.println(c); // } /** * 定义一个查找关注度的循环 * 找到要查找关注度的哪个小组 * 小组中的用户大小要与输入的匹配 */ for (int i = 0; i < num; i++) { int a = sc.nextInt(); int b = sc.nextInt(); int key = sc.nextInt(); int sum = 0; List<Integer> list = map.get(key); if (list!=null){ for (int k = 0; k < list.size(); k++) { if (list.get(k) >= a && list.get(k) <= b) { sum += 1; } } } System.out.println(sum); } }
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int n=in.nextInt();
Map<Integer,ArrayList<Integer>> perfer=new HashMap<>();
for(int i=1;i<n+1;i++){
int per=in.nextInt();
if(perfer.containsKey(per)){
ArrayList<Integer> list=perfer.get(per);
list.add(i);
}
else{
ArrayList<Integer> list=new ArrayList<>();
list.add(i);
perfer.put(per,list);
}
}
int sel=in.nextInt();
for(int i=0;i<sel;i++){
int count=0;
int start=in.nextInt();
int stop=in.nextInt();
int per=in.nextInt();
if(perfer.containsKey(per)){
ArrayList<Integer> li=perfer.get(per);
Iterator<Integer> ltr=li.iterator();
while(ltr.hasNext()){
int num=ltr.next();
if(num>=start&&num<=stop){
count++;
}
}
}
System.out.println(count);
}
}
}