更好的阅读体验

Portal

Portal1: Codeforces

Portal2: Luogu

Description

The Little Elephant loves playing with arrays. He has array \(a\), consisting of \(n\) positive integers, indexed from \(1\) to \(n\). Let's denote the number with index \(i\) as \(a_i\).

Additionally the Little Elephant has \(m\) queries to the array, each query is characterised by a pair of integers \(l_j\) and \(r_j (1 \le l_j \le r_j \le n)\). For each query \(l_j, r_j\) the Little Elephant has to count, how many numbers \(x\) exist, such that number \(x\) occurs exactly \(x\) times among numbers \(a_{l_j}, a_{l_j + 1}, \cdots , a_{r_j}\).

Help the Little Elephant to count the answers to all queries.

Input

The first line contains two space-separated integers \(n\) and \(m (1 \le n, m \le 105)\) - the size of array a and the number of queries to it. The next line contains \(n\) space-separated positive integers \(a_1, a_2, \cdots , a_n (1 \le ai \le 10^9)\). Next \(m\) lines contain descriptions of queries, one per line. The \(j\)-th of these lines contains the description of the \(j\)-th query as two space-separated integers \(l_j\) and \(r_j (1 \le l_j \le r_j \le n)\).

Output

In \(m\) lines print \(m\) integers - the answers to the queries. The \(j\)-th line should contain the answer to the \(j\)-th query.

Sample Input1

7 2
3 1 2 2 3 3 7
1 7
3 4

Sample Output

3
1

Description in Chinese

小象喜欢和数组玩。现在有一个数组\(a\),含有\(n\)个正整数,记第\(i\)个数为\(a_i\)。

现在有\(m\)个询问,每个询问包含两个正整数\(l_j\)和\(r_j (1 \le l_j \le r_j \le n)\),小象想知道在\(a_{l_j}到\)a_{r_j}\(之中有多少个数\)x\(,其出现次数也为\)x$。

Solution

我们先看题目,发现只有查询,没有修改,所以可以用普通的莫队解决。

题目中的\(a_i\)的范围是\(\in [1, 10^9]\),而数的总数的范围是\(\in [1, 10^5]\),所以当这个数大于\(10^5\)了,这个数就不可能为所求的\(x\)忽略这个数后就不用进行离散化了。

Code

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath> using namespace std; const int MAXN = 100005;
int n, m, nowans, a[MAXN], bl[MAXN], ans[MAXN], cnt[MAXN];
struct node {
int l, r, id;
bool operator < (const node &x) const {//排序的规则
return bl[l] == bl[x.l] ? r < x.r : bl[l] < bl[x.l];
}
} info[MAXN];
inline void add(int x) {
if (a[x] > n) return ;//如果数值超了n的范围就退出
if (cnt[a[x]] == a[x]) nowans--;
cnt[a[x]]++;
if (cnt[a[x]] == a[x]) nowans++;
}
inline void dec(int x) {
if (a[x] > n) return ;
if (cnt[a[x]] == a[x]) nowans--;
cnt[a[x]]--;
if (cnt[a[x]] == a[x]) nowans++;
}
int main() {
scanf("%d%d", &n, &m);
int block = (int)sqrt(n);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
bl[i] = i / block;
}
for (int i = 1; i <= m; i++) {
scanf("%d%d", &info[i].l, &info[i].r);//莫队是离线算法,需要记录询问的左右端点
info[i].id = i;//记录每个询问的编号
}
sort(info + 1, info + m + 1);
memset(cnt, 0, sizeof(cnt));
int l = 1, r = 0;
for (int i = 1; i <= m; i++) {//莫队
while (l < info[i].l) dec(l++);
while (l > info[i].l) add(--l);
while (r < info[i].r) add(++r);
while (r > info[i].r) dec(r--);
ans[info[i].id] = nowans;
}
for (int i = 1; i <= m; i++)
printf("%d\n", ans[i]);
return 0;
}

『题解』Codeforces220B Little Elephant and Array的更多相关文章

  1. 『题解』洛谷P1063 能量项链

    原文地址 Problem Portal Portal1:Luogu Portal2:LibreOJ Portal3:Vijos Description 在\(Mars\)星球上,每个\(Mars\)人 ...

  2. 『Python』内存分析_list和array

    零.预备知识 在Python中,列表是一个动态的指针数组,而array模块所提供的array对象则是保存相同类型的数值的动态数组.由于array直接保存值,因此它所使用的内存比列表少.列表和array ...

  3. 『题解』Codeforces1142B Lynyrd Skynyrd

    更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description Recently Lynyrd and Skynyrd went to a ...

  4. 『题解』Codeforces446C DZY Loves Fibonacci Numbers

    更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description In mathematical terms, the sequence \( ...

  5. 『题解』Codeforces1142A The Beatles

    更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description Recently a Golden Circle of Beetlovers ...

  6. 『题解』洛谷P1993 小K的农场

    更好的阅读体验 Portal Portal1: Luogu Description 小\(K\)在\(\mathrm MC\)里面建立很多很多的农场,总共\(n\)个,以至于他自己都忘记了每个农场中种 ...

  7. 『题解』洛谷P2296 寻找道路

    更好的阅读体验 Portal Portal1: Luogu Portal2: LibreOJ Description 在有向图\(\mathrm G\)中,每条边的长度均为\(1\),现给定起点和终点 ...

  8. 『题解』洛谷P1351 联合权值

    更好的阅读体验 Portal Portal1: Luogu Portal2: LibreOJ Description 无向连通图\(\mathrm G\)有\(n\)个点,\(n - 1\)条边.点从 ...

  9. 『题解』Codeforces656E Out of Controls

    更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description You are given a complete undirected gr ...

随机推荐

  1. pycharm 安装第三方包步骤

    pycharm 安装第三方包步骤: 完成.

  2. SpringMVC快速入门记录(二)

    一.数组参数绑定和List参数绑定 1.数组参数绑定 提交多个相同name的参数,保持name的名字和Controller方法参数的数组名称相同即可. 2.List参数绑定 List中存放对象,并将定 ...

  3. python requests简单接口自动化

    get方法 url:显而易见,就是接口的地址url啦 headers:定制请求头(headers),例如:content-type = application/x-www-form-urlencode ...

  4. [BZOJ3029] 守卫者的挑战

    Description 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过.“我,Nizem,是黑魔法圣殿的守卫者.如果你能通过 ...

  5. SpringBoot:1.开启SpringBoot之旅

    什么是 Spring Boot Spring Boot是Spring团队设计用来简化Spring应用的搭建和开发过程的框架.该框架对第三方库进行了简单的默认配置,通过Spring Boot构建的应用程 ...

  6. Swoole 实现在线聊天

    Swoole 跟 thinkphp5 结合开发 WebSocket 在线聊天通讯系统 ThinkPHP 使用 Swoole 需要安装 think-swoole Composer 包,前提系统已经安装 ...

  7. C# 求Π Π/4=1-1/3+1/5-1/7+......+1/(2*n-3)-1/(2*n-1); (n=2000)

    double a = 0.0;//最终Π的结果 double类型 int n; for (n = 1; n <= 2000; n++) { if (n % 2 == 1) { a += 1.0 ...

  8. 【原创】docker在Ubuntu下1小时快速学习

    前言 由于工作原因,很多情况下需要快速学习新的知识,针对docker如果从头到尾看相关书籍学习会非常慢,所以整理了下docker的常用操作,只要跟着本文学习操作,一小时就能掌握docker大部最常用分 ...

  9. 百万年薪python之路 -- HTML标签

    HTML标签 html标签分类 html标签又叫做html元素,它分为块级元素和内联元素(也可以叫做行内元素),都是html规范中的概念. 标题 h1 h2 h3 h4 h5 h6 列表 ol ul ...

  10. 微服务架构 ------ Day01 微服务架构优缺点

    1. 微服务架构的优点 庞大的单体程序 -> 一套微型程序. 每一个服务有明确的边界(服务之间的消息通讯机制) ,每一个服务都能单独的开发和维护,并且更好理解 每一个服务都能由一个团队来开发,当 ...