利用一个数组,下标为要存的数,数值为每次存储的顺序。例如样例中,当1为下标时,存储时数值为1;当2为下标时,存储时数值为2;当5为下标时,存储时数值为4······
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int m,n,a[1011]={0},x,i,j,su=0;//记得要赋初值!!!!!!!
    cin>>m>>n;
    for(i=1;i<=n;i++)
    {
        
        cin>>x;
        if(a[x]!=0)continue;//说明已经存入数组
        su++;
        if(m!=0){a[x]=i;m--;}//说明内存中还有空间
        else               //内存无空间,开始替换
        {
            int mi=i,pos=0;
            for(j=0;j<=1000;j++)
            {
            if(a[j]!=0&&a[j]<mi){mi=a[j];pos=j;}//找到内存中最先存入的数
            }
            a[pos]=0;a[x]=i;
        }
    }
    cout<<su;
}