区间取余

链接:https://ac.nowcoder.com/acm/contest/13504/E
问题描述:给定一个数组,对数组进行多次不同区间问询,查找区间内可以%x的值的个数。

//AC代码:
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
vector<int> v[100005];
int n, q;
int main()
{
    cin >> n >> q;
    for (int i = 1; i <= n; i++)
    {
        int y;
        cin >> y;
        v[y].push_back(i);
    }
    while (q--)
    {
        int l, r, x, ans = 0;
        cin >> l >> r >> x;
        for (int i = x; i <= 1e5; i += x)
        {
            for (int j = 0; j < v[i].size(); j++)
            {
                if (v[i][j] >= l && v[i][j] <= r)
                    ans++;
            }
        }
        cout << ans << endl;
    }
    return 0;
}

想到了开二维数组,但关注点放在了10^4的问询上,所以进行了提前对各余数打表。

解题核心  for (i = x; i <= 1e5; i += x)  没有想出来。长记性了,以后遇到%运算都会想到这点的。

posted @ 2021-03-28 16:27  anyiya  阅读(40)  评论(0编辑  收藏  举报