結果

問題 No.649 ここでちょっとQK!
コンテスト
ユーザー tanpaku
提出日時 2026-03-18 22:39:26
言語 C++17
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
TLE  
実行時間 -
コード長 1,567 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,662 ms
コンパイル使用メモリ 222,524 KB
実行使用メモリ 18,500 KB
最終ジャッジ日時 2026-03-18 22:41:51
合計ジャッジ時間 144,130 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1 TLE * 3
other AC * 1 TLE * 31
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
struct bit{
    int N;
    int v[200008];
    void add(int a,int w){
        for(int x=a;x<=N;x+=x&-x)v[x]+=w;
    }
    ll sum(int a){
        ll rtn=0;
        for(int x=a;x>0;x-=x&-x)rtn+=v[x];
        return rtn;
    }
    ll prod(int a,int b){
        return sum(b)-sum(a-1);
    }
};
int main(){
    int Q,K;
    cin>>Q>>K;
    vector<ll> v;
    vector<pair<int,ll>> qry(Q);
    for(int i=0;i<Q;i++){
        int t;cin>>t;
        qry[i].first=t;
        if(t==1){
            ll va;
            cin>>va;
            qry[i].second=va;
            v.push_back(va);
        }
    }
    vector<ll> c=v;
    sort(c.begin(),c.end());
    c.erase(unique(c.begin(),c.end()),c.end());
    for(int i=0;i<v.size();i++){
        v[i]=lower_bound(c.begin(),c.end(),v[i])-c.begin();
    }
    bit BIT;
    BIT.N=c.size()+1;
    int coun=0;
    for(int i=0;i<Q;i++){
        auto [t,val]=qry[i];
        if(t==1){
            int pos=v[coun++];
            BIT.add(pos,1);
        }else{
            if(BIT.sum(BIT.N-1)<K){
                cout<<-1<<"\n";
            }else{
                int ac=0;
                ll kk=K;
                for(int k=1<<18;k>0;k>>=1){
                    if(k>BIT.N)continue;
                    if(ac+k<=BIT.N&&BIT.v[ac+k]<kk){
                        kk-=BIT.v[ac+k];
                        ac+=k;
                    }
                }
                ac++;
                BIT.add(ac,-1);
                cout<<c[ac]<<"\n";
            }
        }
    }
    return 0;
}
0