题目描述
DS因为善于目测打分而全校闻名,于是被东大女生节组委会请去给参加校花比赛的女生打分。
DS也果然名不虚传,大眼一扫便对眼前站成一排的n个参赛女生依次打出了分数a1,a2...an(ai为整数,0<=ai<=100,1<=i<=n,分数越高越好)。但组委会不仅要知道每个女生的分数还要知道每个女生排名,于是要求DS回答m个询问,每个询问为一个整数i,要求回答从左到右第i个女生的排名(分数最高的排第一)。DS擅长打分但智力有硬伤,于是找到你,想请你帮忙解决这个苦恼他的问题。并且,DS保证如果你能解决他的苦恼,他将会把最终校花的联系方式告诉你。
输入
多组数据
每组三行
第一行为两个整数n,m 1<=n<=100000 1<=m<=10000
第二行为n个正整数,从左到右依次为每个女生的分数 0<=ai<=100
第三行为m个正整数,每个整数i表示从左到右第i个女生 0<i<=n
输出
每组数据输出m行,依次为每次询问的回答
相邻数据组之间空一行
样例输入
5 2
1 2 3 4 5
2 5
样例输出
4
1
题目描述
DS因为善于目测打分而全校闻名,于是被东大女生节组委会请去给参加校花比赛的女生打分。
DS也果然名不虚传,大眼一扫便对眼前站成一排的n个参赛女生依次打出了分数a1,a2...an(ai为整数,0<=ai<=100,1<=i<=n,分数越高越好)。但组委会不仅要知道每个女生的分数还要知道每个女生排名,于是要求DS回答m个询问,每个询问为一个整数i,要求回答从左到右第i个女生的排名(分数最高的排第一)。DS擅长打分但智力有硬伤,于是找到你,想请你帮忙解决这个苦恼他的问题。并且,DS保证如果你能解决他的苦恼,他将会把最终校花的联系方式告诉你。
输入
多组数据
每组三行
第一行为两个整数n,m 1<=n<=100000 1<=m<=10000
第二行为n个正整数,从左到右依次为每个女生的分数 0<=ai<=100
第三行为m个正整数,每个整数i表示从左到右第i个女生 0<i<=n
输出
每组数据输出m行,依次为每次询问的回答
相邻数据组之间空一行
样例输入
5 2 1 2 3 4 5 2 5
样例输出
4 1
#include <iostream>
#include <cstring>
using namespace std ;
#define MAX 100001
#define MAXN 101
int a[MAX];
int s[MAXN];
int main()
{
int n,m,t,b,p;
while(cin>>n>>m){
memset(s,0,sizeof(s));
t=1;
for (int i=1;i<=n;i++)
{
cin>>a[i];
s[a[i]]++;
}
for (int i=100;i>=0;i--)
{
if (s[i]!=0)
{
p=s[i];
s[i]=t;
t+=p;
}
}
for (int i=0;i<m;i++)
{
cin>>b;
cout<<s[a[b]]<<endl;
}
cout<<endl;
}
return 0;
}