本题是模拟题。
我们可以用b数组记录每个数字在a数组中出现的最后位置,然后从0到2·10^5依次寻找最后一次出现最早的数(注意是0!),最后统计输出即可。
AC代码:
1 #include <bits/stdc++.h>//万能头文件 2 3 using namespace std;//使用标准名字空间 4 5 inline int read()//快速读入 6 { 7 int f=1,x=0; 8 char c=getchar(); 9 10 while(c<'0' || c>'9') 11 { 12 if(c=='-')f=-1; 13 c=getchar(); 14 } 15 16 while(c>='0' && c<='9') 17 { 18 x=x*10+c-'0'; 19 c=getchar(); 20 } 21 22 return f*x; 23 } 24 25 int n,a[200005]/*输入数组*/,b[200005]/*存储最后一次出现的位置*/,m=200000007/*出现最早的位置*/,ans/*答案*/; 26 27 int main() 28 { 29 n=read();//输入 30 31 for(register int i=1; i<=n; i++) 32 { 33 a[i]=read(); 34 35 b[a[i]]=i;//记录a[i]出现的最晚位置 36 } 37 38 for(register int i=0; i<=200000; i++) //枚举最后一次出现最早的数,注意是从0开始! 39 { 40 if(b[i]>0 && b[i]<m)//如果这个数出现过且位置比当前最小值还小 41 { 42 m=b[i];//记录最小位置 43 44 ans=i;//记录答案 45 } 46 } 47 48 printf("%d",ans);//输出答案 49 50 return 0;//结束 51 }