用vector装一下数据,排序,然后再去重,去重直接用STL,去重后用lower_bound查找新数据的下标,然后返回下标就行。好难啊啊啊。
#include<stdio.h>
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
vector<int>a;
int b[10000],n;
int find_key(int c)
{
int ans=lower_bound(a.begin(),a.end(),c)-a.begin()+1; //查找下标从1开始
return ans;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
int c;
for(int i=0;i<n;i++)
{
scanf("%d",&c);
b[i]=c;
a.push_back(c);
}
sort(a.begin(),a.end()); //排序
a.erase(unique(a.begin(),a.end()),a.end()); //去重
printf("YES\n"); //建立成功
int m;
scanf("%d",&m);
while(m--)
{
scanf("%d",&c);
int ans=find_key(c); //映射返回离散化结果
printf("%d\n",ans);
}
}
return 0;
}