#include <bits/stdc++.h>
using namespace std;
#define f first
#define s second
#define pb push_back
#define ld long double
#define pll pair<int, int>
#define iii tuple<int,int,int>
#define int long long
#define g0(x) get<0>(x)
#define g1(x) get<1>(x)
#define g2(x) get<2>(x)
struct seg{
int l, r, ind;
seg(int L, int R, int IND): l(L), r(R), ind(IND) {}
bool operator<(seg const &o) const {
if (r != o.r) return r < o.r;
return ind < o.ind;
}
};
int n,k, cur;
vector<seg> v, sv;
vector<vector<int>> p(100005, vector<int>(20, -1));
set<seg> st;
vector<int> ans;
int mxr(int sind, int r){
int cur=sind, ret=0;
for(int k=19;k>=0;k--){
//~ printf("2^%lld th parent of %lld is %lld\n", k, cur, p[cur][k]);
if(p[cur][k]==-1 or v[p[cur][k]].r > r)continue;
ret+=(1<<k);
cur=p[cur][k];
}
return ret;
}
signed main(){
cin>>n>>k;
v.push_back(seg(0,0,0));
sv.push_back(seg(0,0,0));
for(int i=1;i<=n;i++){
int l,r;cin>>l>>r;
v.push_back(seg(l, r, i));
sv.push_back(seg(l, r, i));
}
sort(sv.begin(),sv.end(),[&](auto a,auto b){
return a.r<b.r;
});
stack<seg> s;
for(int i=0;i<=n;i++){
while(!s.empty() and s.top().r <= sv[i].l){
p[s.top().ind][0]=sv[i].ind;
s.pop();
}
s.push(sv[i]);
}
//~ for(int i=0;i<=n;i++){
//~ cout<<p[i][0]<<endl;
//~ }
//~ return 0;
for(int k=1;k<20;k++){
for(int i=0;i<=n;i++){
if(p[i][k-1] != -1)p[i][k]=p[p[i][k-1]][k-1];
}
}
cur=mxr(0, 1e9+5);
if(cur < k){
cout<<-1;
return 0;
}
st.insert(v[0]);
for(int i=1;i<=n;i++){
auto it=lower_bound(st.begin(),st.end(),v[i]);
auto prv=prev(it);
int sind=0, r=1e9+5;
if (it!=st.end()){
r=(*it).l;
if(r < v[i].r)continue;
}
sind=(*prv).ind;
if(v[sind].r > v[i].l) continue;
int rem=mxr(sind, r);
int nwa=mxr(sind, v[i].l), nwb=(v[i].ind, r);
int cand=nwa+nwb+1;
if(cur - rem + cand >= k){
cur=cur-rem+cand;
st.insert(v[i]);
ans.pb(i);
}
//~ printf("sind %lld, r %lld, rem %lld, nwa %lld, nwb %lld\n", sind, r, rem, nwa, nwb);
}
assert(ans.size() >=k);
for(int i=0;i<k;i++){
cout<<ans[i]<<"\n";
}
}
# | 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... |