特別賞……?

题目描述

高橋君はプログラミングコンテストを行い、�N 人の人が参加しました。賞品がないと物足りないのではないかと思った高橋君は「�i 位以上の人のうち、�K 番目に若い人」に特別賞を出すことにしました。参加者全員の年齢は分かっています。�K の値はもう既に決めているのですが、�i の値はまだ決めていません。�i の値を決めるために高橋君は、�K 以上 �N 以下の整数 �i それぞれについて誰が特別賞を取ることが出来るのかを計算してみることにしました。

输入格式

入力は以下の形式で標準入力から与えられる。

�N �K �1X1​ �2X2​ ... ��XN​

  • 11 行目には、コンテストに参加した人数を表した整数 � (1 ≦ � ≦ 100,000)N (1 ≦ N ≦ 100,000) と、整数 � (1 ≦ � ≦ �)K (1 ≦ K ≦ N) が空白区切りで与えられる。
  • 22 行目には、参加者の年齢の情報を表す �N 個の整数が空白区切りで与えられる。このうち �i 番目の整数 �� (1 ≦ �� ≦ �)Xi​ (1 ≦ Xi​ ≦ N) は、順位が �i 位の参加者の年齢が全参加者のうち ��Xi​ 番目に若いことを表す。ただし、� ≠ �p = q のとき �� ≠ ��Xp​ = Xq​ であることが保証される。

输出格式

�−�+1N−K+1 行に出力せよ。そのうち �i 行目には、「�+�−1i+K−1 位以上の人のうち、�K 番目に若い人」の順位を表す 11 つの整数を出力せよ。

题意翻译

给你两个数n,k,输入n个数,输出从第一个数开始的序 列中倒数第k大的数的序号

如样例1 5 2 4 5 3 1 2

输出 2 1 3 5

解释: 在“4,5”的序列中,5为倒数第二大的数,输出“5”的序号2

在“4,5,3”的序列中,4为倒数第二大的数,输出“4”的序号1

在“4,5,3,1”的序列中,3为倒数第二大的数,输出“3”的序号3

在“4,5,3,1,2”的序列中,2为倒数第二大的数,输出“4”的序号5

输入输出样例

输入 #1复制

5 2
4 5 3 1 2

输出 #1复制

2
1
3
5

输入 #2复制

3 1
2 3 1

输出 #2复制

1
1
3

说明/提示

部分点

この問題には部分点が設定されている。

  • � ≦ 1000N ≦ 1000 を満たすテストケースすべてに正解した場合は 4040 点が与えられる。

Sample Explanation 1

以下は、出力の各行についての説明です。 - 11 行目: 22 位以上の人のうち 22 番目に若い人は 22 位の人です。 - 22 行目: 33 位以上の人のうち 22 番目に若い人は 11 位の人です。 - 33 行目: 44 位以上の人のうち 22 番目に若い人は 33 位の人です。 - 44 行目: 55 位以上の人のうち 22 番目に若い人は 55 位の人です。

代码如下

#include<iostream>
#include<functional>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
__gnu_pbds::tree<int,__gnu_pbds::null_type,less<int>,__gnu_pbds::rb_tree_tag,__gnu_pbds::tree_order_statistics_node_update> rbt;
int n,k,p[1000001];//p数组存位置 
int main(){
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        p[x]=i;
        rbt.insert(x);
        if(i>=k){
            cout<<p[*(rbt.find_by_order(k-1))]<<endl;
        }
    }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值