#include <bits/stdc++.h>
using namespace std;
const int maxlog = 20;
vector<vector<int>> binup;
vector<int> rp;
int get(int l,int r)
{
    int ans = 0;
    for(int i = maxlog-1;i >= 0;--i)
    {
        if(binup[i][l] <= r)
        {
            l = binup[i][l];
            ans += (1<<i);
        }
    }
    return ans;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n,k;
    cin >> n >> k;
    vector<pair<int,int>> seg;
    map<int,int> comp;
    for(int i = 0;i < n;++i)
    {
        int l,r;
        cin >> l >> r;
        seg.push_back({l,r});
        comp[l] = 1;
        comp[r] = 1;
    }
    int p = 0;
    for(auto& [u, x]:comp)
    {
        x = p++;
    }
    for(int i = 0;i < n;++i)
    {
        seg[i] = {comp[seg[i].first],comp[seg[i].second]};
    }
    vector<vector<int>> cr(p);
    for(int i = 0;i < n;++i)
    {
        cr[seg[i].first].push_back(seg[i].second);
    }
    rp.resize(p+1);
    rp[p] = p;
    int tmn = p;
    for(int i = p-1;i >= 0;--i)
    {
        for(int j = 0;j < cr[i].size();++j)
        {
            tmn = min(tmn,cr[i][j]);
        }
        rp[i] = tmn;
    }
    binup.resize(maxlog);
    for(int i = 0;i < maxlog;++i)
    {
        binup[i].resize(p+1);
        for(int j = 0;j <= p;++j)
        {
            binup[i][j] = (i == 0 ? rp[j] : binup[i-1][binup[i-1][j]]);
        }
    }
    set<pair<int,int>> cseg;
    int cans = get(0,p-1);
    if(cans < k)
    {
        cout << -1;
        return 0;
    }
    int ct = 0;
    for(int i = 0;i < n;++i)
    {
        int tl = seg[i].first,tr = seg[i].second;
        int lg = 0,rg = p-1;
        auto it = cseg.lower_bound(make_pair(tl,-1));
        if(it != cseg.end())
        {
            rg = (*it).first;
        }
        if(it != cseg.begin())
        {
            it--;
            lg = (*it).second;
        }
        if(lg > tl || rg < tr)
        {
            continue;
        }
        int ch = get(lg,tl) + get(tr,rg) + 1 - get(lg,rg);
        if(cans + ch >= k)
        {
            cout << i+1 << "\n";
            ct++;
            if(ct == k)
                break;
            cans += ch;
            cseg.insert(seg[i]);
        }
    }
    return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |