結果

問題 No.649 ここでちょっとQK!
コンテスト
ユーザー tanpaku
提出日時 2026-03-18 22:49:21
言語 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,575 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,399 ms
コンパイル使用メモリ 220,768 KB
実行使用メモリ 18,372 KB
最終ジャッジ日時 2026-03-18 22:51:46
合計ジャッジ時間 144,269 ms
ジャッジサーバーID
(参考情報)
judge1_1 / judge2_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
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 lower_bound(int w){
        if(w<=0)return 0;
        int x=0;
        int log=1;
        while(log<N)log<<=1;
        for(int k=log/2;k>0;k>>=1){
            if(x+k<=N&&v[x+k]<w){
                w-=v[x+k];
                x+=k;
            }
        }
        return x+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=BIT.lower_bound(K);
                BIT.add(ac,-1);
                cout<<c[ac]<<"\n";
            }
        }
    }
    return 0;
}
0