ABC 248 | D - Range Count Query

题目描述

给定一个数组A=(a1,a2,...,a3),给定Q组询问,每组询问给出lrx,输出下标[l,r]范围内数值等于x的元素个数。

数据范围

  • 1N2×105
  • 1AiN
  • 1Q2×105
  • 1LRN,1XN

题解

由于本题中每个数字的范围是2×105,所以可以预处理出每个数字的下标,对于每组询问L,R,X,只需二分查找X的位置数组,计算在[L,R]范围内的下标的个数即可。
若存入vector中,可直接使用lower_bound()和upper_bound()查询,准确且方便

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;

const int N = 2e5 + 10;

vector<int> vec[N];
int n, q;

int main()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; i ++){
        int x;
        scanf("%d", &x);
        vec[x].push_back(i);
    }
    scanf("%d", &q);
    while(q --){
        int l, r, x;
        scanf("%d%d%d", &l, &r, &x);
        auto itl = lower_bound(vec[x].begin(), vec[x].end(), l);
        auto itr = upper_bound(vec[x].begin(), vec[x].end(), r);
        printf("%d\n", itr - itl);
    }
    return 0;
}

posted @   小菜珠的成长之路  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示