当前位置: 代码迷 >> 综合 >> KK散步(multiset)+(数组)
  详细解决方案

KK散步(multiset)+(数组)

热度:20   发布时间:2023-12-06 03:40:44.0

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,但还是很伤心。。。加油。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

  1. #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;
    }