【牛客网】用户喜好编程题 第1行为n代表用户的个数 第2行为n个整数,第i个代表用户标号为i的用户对某类文章的喜好度 第3行为一个正整数q代表查询的组数 第4行到第(3+q)行,每行包含3个整数l,r

本文介绍了一种用于查询特定范围内用户对某类文章喜好度的算法实现。通过输入用户数量、每个用户的喜好度及查询条件,算法能快速计算并输出指定喜好度的用户数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

只是写算法的话感觉还是c来的快
/**
输入描述:
输入: 第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的用户的个数
输入例子1:
5
1 2 3 3 5
3
1 2 1
2 4 5
3 5 3
输出例子1:
1
0
2
例子说明1:
样例解释:
有5个用户,喜好值为分别为1、2、3、3、5,
第一组询问对于标号[1,2]的用户喜好值为1的用户的个数是1
第二组询问对于标号[2,4]的用户喜好值为5的用户的个数是0
第三组询问对于标号[3,5]的用户喜好值为3的用户的个数是2
**/

#include <stdio.h>
#include <stdlib.h>
int main()
{
    //载入数据
    int user_num=0;
    int i=0;
    scanf("%d",&user_num);
    int prefer[300000];
    for(i=0; i<user_num; i++)
    {
        scanf("%d",&prefer[i]);
    }
    int group_num=0;
    int group[300000][3]={0};
    int j =0;
    int k=0;
    int num=0;
    scanf("%d",&group_num);
    for(i=0; i<group_num; i++)
    {
        num = 0;
        for(j=0; j<3; j++)
        {
            scanf("%d",&group[i][j]);
        }
        for(k=group[i][0]-1; k<group[i][1]; k++)
        {
            if(prefer[k]==group[i][2])
            {
                num+=1;
            }
            //printf("#k%d:%d**%d\n",k,prefer[k],group[i][2]);
        }
        printf("%d\n",num);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值