This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("avx,avx2,sse,sse2")
#include<bits/stdc++.h>
#define int long long
//#define ll long long
#define down cout<<'\n';
#define NHP ios_base::sync_with_stdio(0);cout.tie(0);cin.tie(0);
#define modwwe int t;cin>>t; while(t--)
#define bit(i,j) (i>>j&1)
#define sobit(a) __builtin_popcountll(a)
#define task "test"
#define fin(x) freopen(x".inp","r",stdin)
#define fou(x) freopen(x".out","w",stdout)
#define pb push_back
#define checktime cerr << (double)clock() / CLOCKS_PER_SEC * 1000 << " ms";
using namespace std;
void ngha();
const int mod2=1e9+7;
const int mod1=998244353;
struct ib
{
int a;
int b;
};
struct icd
{
int a,b;
};
struct ic
{
int a,b,c;
};
struct id
{
int a,b,c,d;
};
struct ie
{
int a,b,c, d,e;
};
int n,m,s1,s2,s4,s3,sf,k,r,mid,s5,s6,mx,s7,s8,s9,mx2,res,dem2=0,dem=0,l;
int i,s10,s12;
int el=29;
main()
{
//#ifndef ONLINE_JUDGE
/// fin(task),fou(task);
//#endif
NHP
//modwwe
// cin>>res;
ngha();
}
ic bit[1000001];
int bit2[1000001];
ic a[500002];
int b[500001];
ic c[500001];
int st[18][1000003];
int g[1000003];
vector<int>v;
vector<int> v2;
bool cmp(ic a,ic b)
{
return a.a<b.a;
}
void upd(int x,int y,int z,int cc)
{
for(x; x<=2*n; x+=x&-x)
{
if(y>bit[x].a)
bit[x].a=y,bit[x].b=z,bit[x].c=cc;
}
///bit[x]=max(bit[x],y);
}
ic get(int x)
{
int ss=0;
for(x; x; x-=x&-x)
{
if(bit[x].a>bit[ss].a)ss=x;
}
return bit[ss];
}
void upd2(int x,int y)
{
for(x; x; x-=x&-x)bit2[x]=min(bit2[x],y);
}
int get2(int x)
{
int ss=1e9+1;
for(x; x<=2*n; x+=x&-x) //cout<<x<<" "<<bit2[x]<<" "<<ss,down
{
ss=min(bit2[x],ss);
}
return ss;
}
int get3(int x,int y)
{
int ss=0;
for(int j=17; j>=0; --j)
{
if(g[st[j][x]]<=y)
{
// cout<<g[st[j][x]]<<" "<<st[j][x]<<" "<<j<<" "<<x,down
//if(j==17) cout<<j<<" "<<st[j][x],down
x=st[j][x];
ss+=(1<<j);
}
}
return ss;
}
int get4(int x,int y)
{
int ss=0;
for(int j=17; j>=0; --j)
{
if(g[st[j][x]]<=y)
{
// cout<<g[st[j][x]]<<" "<<st[j][x]<<" "<<j<<" "<<x,down
//if(j==17) cout<<j<<" "<<st[j][x],down
x=st[j][x];
ss+=(1<<j);
}
}
return ss;
}
vector<int> v3;
void ngha()
{
cin>>n>>k;
for(int i=1; i<=n; i++)
cin>>a[i].a>>a[i].b,v.pb(a[i].a),v.pb(a[i].b),v3.pb(a[i].a),a[i].c=i;
v3.pb(0);
v3.pb(1e9+1);
sort(v.begin(),v.end());
sort(v3.begin(),v3.end());
for(int i=1; i<=n; i++)
a[i].a=lower_bound(v.begin(),v.end(),a[i].a)-v.begin()+1,
a[i].b=lower_bound(v.begin(),v.end(),a[i].b)-v.begin()+1;
///c[i]=a[i];
for(int i=1; i<=n; i++) c[i]=a[i];
sort(a+1,a+1+n,cmp);
/// nhay nhi phan :/
s2=a[n].b;
s3=n;
b[n]=n;
b[n+1]=n+1;
a[n+1].a=1e9+1;
a[n+1].c=n+1;
for(int i=0; i<=17; i++)
st[i][n+1]=n+1;
for(int i=n-1; i>=1; --i)
{
if(a[i].b<s2) s2=a[i].b,s3=i;
b[i]=s3;
}
g[n+1]=1e9;
for(int i=0; i<=n; ++i)
{
l=i+1;
r=n;
while(l<=r)
{
int mid=l+r>>1;
if(a[mid].a>=a[i].b) r=mid-1;
else l=mid+1;
}
st[0][a[i].c]=a[b[r+1]].c;
if(a[r+1].a==1e9+1)
{s8=lower_bound(v3.begin(),v3.end(),a[r+1].a)-v3.begin();
if(g[a[i].c]==0) g[a[i].c]=s8;
g[a[i].c]=min(g[a[i].c],s8);
}
else
{ s8=lower_bound(v3.begin(),v3.end(),v[a[r+1].a-1])-v3.begin();
if(g[a[i].c]==0) g[a[i].c]=s8;
g[a[i].c]=min(g[a[i].c],s8);
}
// cout<<i<<" "<<a[i].a<<" "<<b[r+1]<<" "<<a[b[r+1]].a<<" "<<r+1,down
///if(a[i].c==3) cout<<r+1<<" "<<g[a[i].c],down
}
for(int i=1; i<18; i++)
for(int j=0; j<=n*2; j++)
st[i][j]=st[i-1][st[i-1][j]];
for(int i=1; i<=n*2; i++)
bit[i]= {0,0,0},bit2[i]=1e9+1;
for(int i=1; i<=n; i++)
a[i]=c[i];
/// cout<<get3(1,4)<<" "<<get3(0,2),down
/// cout<<get3(0,2),down
/// cout<<st[0][1],down
dem=0;
// cout<<get3(1,11);
mx2=get3(0,n+1);
for(int i=1; i<=n; i++)
{
//cout<<i,down
if(dem==k)
{
break;
}
ic ss2=get(a[i].a);
if(ss2.b>a[i].a) continue;
s2=ss2.c;
s3=get2(a[i].a);
if(a[i].b>s3) continue;
if(s3==1e9+1) s3=lower_bound(v3.begin(),v3.end(),s3)-v3.begin();
else s3=lower_bound(v3.begin(),v3.end(),v[s3-1])-v3.begin();
s9=lower_bound(v3.begin(),v3.end(),v[a[i].a-1])-v3.begin();
if(mx2-get3(s2,s3)+get3(s2,s9)+get3(i,s3)+1>=k)
{
mx2=mx2-get3(s2,s3)+get3(s2,s9)+get3(i,s3)+1;
dem++;
upd(a[i].a,a[i].a,a[i].b,i);
upd2(a[i].a,a[i].a);
v2.pb(i);
}
}
if(dem==k)
for(auto x:v2)
cout<<x,down
else cout<<-1;
}
/*
4 3
21 54
86 92
85 90
90 101
*/
Compilation message (stderr)
event2.cpp:45:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
45 | main()
| ^~~~
event2.cpp: In function 'void upd(long long int, long long int, long long int, long long int)':
event2.cpp:72:9: warning: statement has no effect [-Wunused-value]
72 | for(x; x<=2*n; x+=x&-x)
| ^
event2.cpp: In function 'ic get(long long int)':
event2.cpp:82:9: warning: statement has no effect [-Wunused-value]
82 | for(x; x; x-=x&-x)
| ^
event2.cpp: In function 'void upd2(long long int, long long int)':
event2.cpp:90:9: warning: statement has no effect [-Wunused-value]
90 | for(x; x; x-=x&-x)bit2[x]=min(bit2[x],y);
| ^
event2.cpp: In function 'long long int get2(long long int)':
event2.cpp:95:9: warning: statement has no effect [-Wunused-value]
95 | for(x; x<=2*n; x+=x&-x) //cout<<x<<" "<<bit2[x]<<" "<<ss,down
| ^
event2.cpp: In function 'void ngha()':
event2.cpp:168:22: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
168 | int mid=l+r>>1;
| ~^~
# | 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... |