分析:
a作为一个长数组,存入所有需要进入内存的单词
m为内存大小,相当于大小为m的窗口,获取a中最后m个内容。
vis作为标记,判断内存中是否存在此单词。

int main()
{
    int m,n;
    cin >> m >> n;
    int a[1010];     //长数组,存入所有单词(m为窗口大小)
    int vis[1010];   //标记存入的单词,表示内存中单词是否存在
    int cnt = 0;     //查找次数
    for(int i = 0; i < n; i++)
    {
        int x;
        cin >> x;
        if(vis[x] == 1)continue;
        a[cnt++] = x;
        vis[x] = 1;
        if(cnt > m)
        {
           vis[a[cnt-m-1]] = 0;
        }
    }
    cout << cnt << endl;
    return 0;
}

*关于 cnt++ 和 ++cnt 的问题:
(1)cnt++ 是先运算再+1
(2)++cnt 是先+1再运算
如果写成
a[++cnt] = x; 
那么数组a是从 a[1] 位置开始存单词
 vis[a[cnt-m-1]] = 0;
要写成
 vis[a[cnt-m]] = 0;