描述
学校中有 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.