KK散步
Description
KK今天在散步,看到路边有很多植物,他想知道自己能看到的最高的植物有多高,但是这条路很长,KK的视力没有那么好,一次只能看到K范围内的植物(站在1,最多只能看到第k个植物),而且KK好马不吃回头草,他不会转头去看后面的植物,你知道他每一秒看到的植物中最高的高度是多少吗?(KK每秒走一步,当能看到终点时,KK就回家了,不往前走了)。
Input
第一行 n,k,k<=n-1<=1e6;
第二行,n个数字,代表路上的植物的高度,每个高度都是正整数。
Output
n-k+1 个数字,代表第一秒到第n-k+1秒中,每一秒KK能看到的最高植物的高度
Samples
input Copy
8 3
1 3 1 3 5 3 6 7
output Copy
3 3 5 5 6 7
Hint
植物不会有负数,也不会很高。
//我的代码没ac但是我真找不出错了
本题就是以到将数组与容器结合起来用的题,对于multiset他是自己默认升序排的,而且是用二分的手法,所以以后碰到这种区间排序题就可以用它和数组的结合使用了,以数组作为基,以他作为手段
虽然没ac,但还是很伤心。。。加油。
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
#include <iostream> #include <string> #include <set> using namespace std; const int N=1e6+10; int w[N]; int main() {multiset<int>mu;int n,k; cin>>n>>k;for(int i=0;i<n;i++)scanf("%d",&w[i]);for(int i=0;i<k;i++){mu.insert(w[i]);} cout<<*(--mu.end())<<" ";for(int i=k;i<n;i++){mu.erase(w[i-k]);mu.insert(w[i]);cout<<*(--mu.end());if(i!=n-1)cout<<" ";}cout<<endl; }