DS的苦恼 数组 排序

来源:互联网 发布:logo设计自动生成软件 编辑:程序博客网 时间:2024/06/05 18:09

题目描述

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 21 2 3 4 52 5

样例输出

41


#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; }


0 0