[莫队] Poklon

这是一篇关于使用莫队算法解决数组区间计数问题的博客。博客描述了一个题目,要求在给定的数组区间内计算不同值恰好出现两次的数量。提供了样例输入和输出,以及解题思路——应用莫队模板并进行离散化处理。
摘要由CSDN通过智能技术生成

文章目录


题目

题目描述
Mirko是一个非常简单的人。Mirko的朋友Darko给了他由N个自然数组成的一个数组,并问了他Q个问题。每个问题由两个整数L和R组成,要求Mirko回答在数组的第L位到第R位中恰好出现两次的不同值有多少种。

输入
第一行输入包含整数N和Q(1≤N,Q≤5*1e5)。表示数组中自然数的个数和问题的个数。 第二行输入包含N个自然数ai(ai≤1e9)。表示数组。 接下来Q行每行包含两个整数Li和Ri(1≤Li≤Ri≤N),表示一个问题询问的区间。

输出
输出Q行,每行一个整数。第i行的整数表示第i个问题的答案。

样例输入
5 1
1 2 1 1 1
1 3

样例输出
1

题解

莫队模板题,不懂莫队的
有人说莫队是提莫队长,emmm…

打了莫队要再离散化一下就过了

代码

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

using namespace std;

template <typename T>
T Fabs(T x) {
   return x < 0 ? -x : x;}

template <typename T>
T Max(T x, T y) {
   return x > y ? x : y;}

const int N = 500005;
const int Q = 500005;

int n, q, m, unit, curl = 1, curr = 0, answer;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值