//#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define f first
#define s second
#define all(x) x.begin(),x.end()
#define _ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
void setIO(string s) {
freopen((s + ".in").c_str(), "r", stdin);
freopen((s + ".out").c_str(), "w", stdout);
}
const int inf=1e9+5;
int main(){_
int n,k;
cin>>n>>k;
vector<pair<pair<int,int>,int>> vec(n+2);
vector<int> L(n+2),R(n+2);
for(int i=0;i<n;i++){
cin>>L[i]>>R[i];
vec[i].f={L[i],R[i]};
vec[i].s=i;
}
vec[n]={{0,0},n};
vec[n+1]={{inf,inf+1},n+1};
L[n+1]=inf;
R[n+1]=inf+1;
vector<vector<int>> f(n+2,vector<int>(20));
set<pair<int,int>> S;
sort(all(vec));
f[n+1][0]=n+1;
S.insert({inf,n+1});
for(int i=n;i>=0;i--){
int id=vec[i].s;
{
auto it=S.lower_bound({R[id],0});
f[id][0]=(*it).s;
}
{
S.insert({L[id],id});
auto it=S.find({L[id],id});
if(it!=S.end() and (*next(it)).f==L[id] and R[(*next(it)).s]>R[id]){
S.erase(next(it));
it=S.find({L[id],id});
}
while(it!=S.begin() and R[(*prev(it)).s]>=R[id]){
S.erase(prev(it));
it=S.find({L[id],id});
}
}
}
for(int j=1;j<20;j++){
for(int i=0;i<=n+1;i++){
f[i][j]=f[f[i][j-1]][j-1];
}
}
S.clear();
S.insert({0,n});
S.insert({inf,n+1});
auto get=[&](int i,int j){
int ans=0;
int x=i;
for(int k=19;k>=0;k--){
if(R[f[x][k]]<L[j]){
ans+=(1<<k);
x=f[x][k];
}
}
if(R[f[x][0]]<=L[j]) return ans+1;
else return ans;
};
auto banana=[&](int i,int j){
if(L[i]>L[j]) swap(i,j);
return (R[i]>L[j]);
};
vector<int> ans;
int cur=get(n,n+1);
for(int i=0;i<n;i++){
auto it=S.lower_bound({L[i],0});
if(banana((*it).s,i) or banana((*prev(it)).s,i)) continue;
int cur2=cur-get((*prev(it)).s,(*it).s);
cur2+=get((*prev(it)).s,i);
cur2+=get(i,(*it).s);
cur2++;
//cout<<i+1<<' '<<cur2<<'\n';
if(cur2<k) continue;
cur=cur2;
ans.push_back(i);
S.insert({L[i],i});
}
if((int)ans.size()<k){
cout<<-1<<'\n';
}
else{
for(int i=0;i<k;i++){
cout<<ans[i]+1<<'\n';
}
}
return 0;
}
//maybe its multiset not set
//yeeorz
//diaoborz
Compilation message (stderr)
event2.cpp: In function 'void setIO(std::string)':
event2.cpp:15:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
15 | freopen((s + ".in").c_str(), "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
event2.cpp:16:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
16 | freopen((s + ".out").c_str(), "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... |