题目:http://codeforces.com/problemset/problem/69/E
题意:输入两个正整数n,m,接下来输入n个整数,求从第一个数开始依次找连续的m个数中的最大的没有重复的数,如果不存在就输出"Nothing",比如输入为:
5 3
1 2 2 3 3
那么就有
1 2 2
2 2 3
2 3 3
这3种情况,它们的最大的没有重复的数字分别是1,3,2
分析:我们这样来做,用一个map和一个set,其中map用来表示一个数出现了几次,set来存储连续的m个数中没有重复的数字,这样就很容易解决了。
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <map>
#include <set>
using namespace std;
const int N = 100005;
int a[N];
set<int> s;
map<int,int> m;
int main()
{
int n,k,t;
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
{
scanf("%d",&t);
a[i] = t;
if(++m[t] == 1)
s.insert(t);
else
s.erase(t);
if(i < k-1) continue;
t = a[i-k];
if(--m[t] == 1)
s.insert(t);
else
s.erase(t);
if(s.size())
cout<<*(--s.end())<<endl;
else
cout<<"Nothing"<<endl;
}
return 0;
}