#include<bits/stdc++.h>
using namespace std;
#define foru(i,a,b) for(int i=(a); i<=(b); ++i)
#define ford(i,a,b) for(int i=(a); i>=(b); --i)
#define rep(i,a) for(int i=0; i<(a); ++i)
#define sz(a) (int)(a).size()
#define all(a) (a).begin(),(a).end()
#define bit(s,i) (((s)>>(i))&1)
#define ii pair<int,int>
#define vi vector<int>
#define vii vector<ii>
#define fi first
#define se second
#define ll long long
#define int long long
#define eb emplace_back
#define pb push_back
#define __builtin_popcount __builtin_popcountll
#define _ << " " <<
template <class X, class Y> bool maxi(X &x, Y y){return x<y?x=y,true:false;}
template <class X, class Y> bool mini(X &x, Y y){return x>y?x=y,true:false;}
const int N=1e5+5;
const int INF=1e9;
const int LG=17;
int n,k,cntSeg,jump[N][LG+1];
ii seg[N],iniSeg[N],seg2[N];
set<ii> st;
void buildJump(){
foru(i,1,cntSeg) jump[i][0]=lower_bound(seg2+1,seg2+1+cntSeg,ii(seg2[i].se,0))-seg2;
foru(i,1,LG){
foru(j,1,cntSeg){
if(jump[j][i-1]>cntSeg) jump[j][i]=jump[j][i-1];
else jump[j][i]=jump[jump[j][i-1]][i-1];
}
}
}
int numSeg(int l, int r){
int s=lower_bound(seg2+1,seg2+1+cntSeg,ii(l,0))-seg2;
if(seg2[s].se>r || s>cntSeg) return 0;
int res=1;
ford(i,LG,0){
if(jump[s][i]<=cntSeg && seg2[jump[s][i]].se<=r){
res+=1<<i;
s=jump[s][i];
}
}
return res;
}
void solve(){
cin>>n>>k;
foru(i,1,n){
cin>>seg[i].fi>>seg[i].se;
iniSeg[i]=seg[i];
}
sort(seg+1,seg+1+n,[](ii x, ii y){return x.se<y.se || (x.se==y.se && x.fi>y.fi);});
foru(i,1,n){
if(cntSeg!=0 && seg[i].fi<=seg2[cntSeg].fi && seg2[cntSeg].se<=seg[i].se) continue;
seg2[++cntSeg]=seg[i];
}
buildJump();
st.insert({-1,-1});
st.insert({INF+1,INF+1});
vi segAns;
int curNum=numSeg(-1,INF+1);
if(curNum<k){
cout<<"-1\n";
return;
}
foru(i,1,n){
auto itL=st.lower_bound(iniSeg[i]);
auto itR=itL; --itL;
if(iniSeg[i].fi<itL->se || iniSeg[i].se>itR->fi) continue;
int numAfter=curNum-numSeg(itL->se,itR->fi)+numSeg(itL->se,iniSeg[i].fi)+numSeg(iniSeg[i].se,itR->fi);
if(k>0 && numAfter>=k-1){
curNum=numAfter; --k;
segAns.eb(i);
st.insert(iniSeg[i]);
}
}
for(int i:segAns) cout<<i<<'\n';
}
int32_t main(){
#define task "test"
if(fopen(task".inp", "r")){
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
cin.tie(0)->sync_with_stdio(0);
int tc=1; //cin>>tc;
foru(i,1,tc){
solve();
}
}
Compilation message (stderr)
event2.cpp: In function 'int32_t main()':
event2.cpp:102:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
102 | freopen(task".inp", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
event2.cpp:103:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
103 | freopen(task".out", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~| # | 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... |