题意:如下图,求滑动窗口的最小值?
效率:O(nlog(n))
int a[100005];
/*
struct cmp{
bool operator()(const int &a,const int &b){return a>b;}
};*/
set<int> s;
int main()
{
set<int>::iterator it;
int n,k;
while(~scanf("%d%d",&n,&k))
{
s.clear();
for(int i=1;i<k;i++)
{
scanf("%d",&a[i]);
s.insert(a[i]);
}
int first=1;
for(int i=k;i<=n;i++)
{
scanf("%d",&a[i]);
s.insert(a[i]);
if(first){printf("%d",*s.begin());first=0;}
else printf(" %d",*s.begin());
it=s.find(a[i-k+1]);
if(it!=s.end() && s.size()>1)s.erase(it); //可能有相同的数,s.insert()是插入不进去的,而且需要保证元素个数大于1个
}
}
return 0;
}