【模拟】(正解树状数组)-校长的问题-C++-计蒜客

描述

学校中有 n 名学生,学号分别为 1 - n。再一次考试过后,学校按照学生的分数排了一个名次(分数一样,按照名字的字典序排序)。你是一名老师,你明天要和校长汇报这次考试的考试情况,校长询问的方式很奇怪,比如说:“学号前 a 的人中,排名前 b 的有多少人?”。

校长问了一堆这样的问题,你需要今天全部计算出来,明天好向他汇报。


输入
第一行俩个整数,n 和 m,分别表示学校学生的数量和校长问题的数量。(1 <= n, m <= 10^5)
第二行有 n 个整数,表示按学号顺序这 n 个学生在这次考试中对应的排名。

接下来 m 行,每行俩个整数 a, b 表示校长的问题中的具体数字。(1≤a,b≤n)

输出
输出 mm 行,每行一个整数代表校长问题的答案。


输入样例 1 

6 3
3 2 5 4 6 1
4 4
2 5
6 4
输出样例 1

3
2
4

这道题目的正解本来是树状数组,但是由于我还没有接触 所以想都没想到,索性直接按照题目一波暴力模拟,可是我提交就ac了 ,接下来上代码,每段分别对应题目中相应的环节。

AC代码:

#include<bits/stdc++.h>
using namespace std;
int a_[100000+1];
int main()
{
	int n,m,a,b;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a_[i];
	}
	for(int i=1;i<=m;i++)
	{
		cin>>a>>b;
		int ans=0;
		for(int i=1;i<=a;i++)
		{
			if(a_[i]<=b)ans++;
		}
		cout<<ans<<endl;
	}
	return 0;
}

比用树状数组还短
ov.

个人博客地址: www.moyujiang.com 或 moyujiang.top
原文地址:https://www.cnblogs.com/moyujiang/p/11167782.html