#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <unordered_map>
using namespace std;
const int MAXN=1e5+10;
#define endl '\n'
struct Range {
int l, r;
int ind;
bool friend operator < (Range a, Range b) {
return a.r<b.r;
}
};
struct Hole {
int l, r, res;
bool friend operator < (Hole a, Hole b) {
return a.r<b.r;
}
};
Range e[MAXN], og[MAXN];
int points[2*MAXN];
unordered_map <int,int> um;
vector <int> ans;
set <Hole> s;
int sp[2][MAXN][20], cnt;
int n, k;
void sparce_table() {
for (int i=1;(1<<i)<=n;i++) {
for (int j=1;j+(1<<i)-1<=n;j++) {
sp[0][j][i]=max(sp[0][j][i-1], sp[0][j + (1 << (i-1))][i-1]);
}
}
}
void sparce_tree() {
for (int i=1;(1<<i)<=cnt;i++) {
for (int j=0;j<=cnt;j++) {
if (sp[1][j][i-1]==0) continue;
sp[1][j][i]=sp[1][sp[1][j][i-1]][i-1];
}
}
}
int find_dist(int cur, int gr) {
int st=18, res=0;
while (st>=0) {
if (sp[1][cur][st]!=0 && sp[1][cur][st]<=gr) {
cur=sp[1][cur][st];
res+=(1<<st);
}
st--;
}
return res;
}
int main () {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> k;
for (int i=1;i<=n;i++) {
cin >> e[i].l >> e[i].r;
e[i].ind=i;
points[2*i-1]=e[i].l;
points[2*i]=e[i].r;
}
sort(points+1,points+2*n+1);
cnt=1;
for (int i=1;i<=2*n;i++) {
if (um[points[i]]!=0) continue;
um[points[i]]=cnt;
cnt++;
}
for (int i=1;i<=n;i++) {
e[i].l=um[e[i].l];
e[i].r=um[e[i].r];
og[i]=e[i];
}
sort(e+1,e+n+1);
for (int i=1;i<=n;i++) sp[0][i][0]=e[i].l;
sparce_table();
for (int i=n-1;i>=1;i--) {
if (e[i].r==e[i+1].r) continue;
int st=18, j=i+1;
if (e[j].l<e[i].r) {
while (st>=0) {
if (j+(1<<st)-1<=n && sp[0][j][st]<e[i].r) j+=(1<<st);
st--;
}
}
sp[1][e[i].r][0]=e[j].r;
}
sp[1][0][0]=e[1].r;
sparce_tree();
s.insert({0,cnt+1,k});
int cur_sum=k;
for (int i=1;i<=n;i++) {
auto it=s.lower_bound({og[i].r,og[i].r,1});
if ((*it).l>og[i].l) continue;
int curl, curr;
curl=(*it).l; curr=(*it).r;
int lef=find_dist(curl,og[i].l);
int ri=find_dist(og[i].r,curr);
if (lef+ri+1+cur_sum-(*it).res>=k) {
cur_sum-=(*it).res;
cur_sum+=lef+ri+1;
ans.push_back(i);
s.erase(it);
s.insert({curl,og[i].l,lef});
s.insert({og[i].r,curr,ri});
}
if (ans.size()==k) break;
}
if (ans.size()<k) cout << -1 << endl;
else for (auto i:ans) cout << i << endl;
return 0;
}
/*
5 4
1 3
2 5
8 9
6 8
10 15
*/
Compilation message
event2.cpp: In function 'int main()':
event2.cpp:110:23: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
110 | if (ans.size()==k) break;
| ~~~~~~~~~~^~~
event2.cpp:112:19: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
112 | if (ans.size()<k) cout << -1 << endl;
| ~~~~~~~~~~^~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
6488 KB |
Output is correct |
2 |
Correct |
2 ms |
6492 KB |
Output is correct |
3 |
Correct |
1 ms |
6492 KB |
Output is correct |
4 |
Runtime error |
66 ms |
46320 KB |
Execution killed with signal 11 |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
6492 KB |
Output is correct |
2 |
Correct |
1 ms |
6488 KB |
Output is correct |
3 |
Correct |
1 ms |
6492 KB |
Output is correct |
4 |
Correct |
1 ms |
6492 KB |
Output is correct |
5 |
Correct |
1 ms |
6492 KB |
Output is correct |
6 |
Correct |
1 ms |
6492 KB |
Output is correct |
7 |
Correct |
1 ms |
6492 KB |
Output is correct |
8 |
Correct |
1 ms |
6608 KB |
Output is correct |
9 |
Correct |
1 ms |
6584 KB |
Output is correct |
10 |
Correct |
1 ms |
6492 KB |
Output is correct |
11 |
Correct |
1 ms |
6492 KB |
Output is correct |
12 |
Correct |
1 ms |
6492 KB |
Output is correct |
13 |
Correct |
1 ms |
6492 KB |
Output is correct |
14 |
Correct |
1 ms |
6492 KB |
Output is correct |
15 |
Correct |
1 ms |
6492 KB |
Output is correct |
16 |
Correct |
1 ms |
6492 KB |
Output is correct |
17 |
Correct |
1 ms |
6488 KB |
Output is correct |
18 |
Correct |
1 ms |
6492 KB |
Output is correct |
19 |
Correct |
1 ms |
6492 KB |
Output is correct |
20 |
Correct |
1 ms |
6492 KB |
Output is correct |
21 |
Correct |
2 ms |
6492 KB |
Output is correct |
22 |
Correct |
1 ms |
6488 KB |
Output is correct |
23 |
Correct |
1 ms |
6492 KB |
Output is correct |
24 |
Correct |
1 ms |
6488 KB |
Output is correct |
25 |
Correct |
1 ms |
6488 KB |
Output is correct |
26 |
Correct |
1 ms |
6492 KB |
Output is correct |
27 |
Correct |
1 ms |
6492 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
6492 KB |
Output is correct |
2 |
Correct |
1 ms |
6488 KB |
Output is correct |
3 |
Correct |
1 ms |
6492 KB |
Output is correct |
4 |
Correct |
1 ms |
6492 KB |
Output is correct |
5 |
Correct |
1 ms |
6492 KB |
Output is correct |
6 |
Correct |
1 ms |
6492 KB |
Output is correct |
7 |
Correct |
1 ms |
6492 KB |
Output is correct |
8 |
Correct |
1 ms |
6608 KB |
Output is correct |
9 |
Correct |
1 ms |
6584 KB |
Output is correct |
10 |
Correct |
1 ms |
6492 KB |
Output is correct |
11 |
Correct |
1 ms |
6492 KB |
Output is correct |
12 |
Correct |
1 ms |
6492 KB |
Output is correct |
13 |
Correct |
1 ms |
6492 KB |
Output is correct |
14 |
Correct |
1 ms |
6492 KB |
Output is correct |
15 |
Correct |
1 ms |
6492 KB |
Output is correct |
16 |
Correct |
1 ms |
6492 KB |
Output is correct |
17 |
Correct |
1 ms |
6488 KB |
Output is correct |
18 |
Correct |
1 ms |
6492 KB |
Output is correct |
19 |
Correct |
1 ms |
6492 KB |
Output is correct |
20 |
Correct |
1 ms |
6492 KB |
Output is correct |
21 |
Correct |
2 ms |
6492 KB |
Output is correct |
22 |
Correct |
1 ms |
6488 KB |
Output is correct |
23 |
Correct |
1 ms |
6492 KB |
Output is correct |
24 |
Correct |
1 ms |
6488 KB |
Output is correct |
25 |
Correct |
1 ms |
6488 KB |
Output is correct |
26 |
Correct |
1 ms |
6492 KB |
Output is correct |
27 |
Correct |
1 ms |
6492 KB |
Output is correct |
28 |
Correct |
3 ms |
9048 KB |
Output is correct |
29 |
Correct |
3 ms |
9052 KB |
Output is correct |
30 |
Correct |
3 ms |
9304 KB |
Output is correct |
31 |
Correct |
3 ms |
9052 KB |
Output is correct |
32 |
Correct |
3 ms |
9052 KB |
Output is correct |
33 |
Correct |
4 ms |
9052 KB |
Output is correct |
34 |
Correct |
4 ms |
8980 KB |
Output is correct |
35 |
Correct |
5 ms |
9308 KB |
Output is correct |
36 |
Correct |
4 ms |
9308 KB |
Output is correct |
37 |
Correct |
4 ms |
9308 KB |
Output is correct |
38 |
Correct |
3 ms |
9172 KB |
Output is correct |
39 |
Correct |
4 ms |
9308 KB |
Output is correct |
40 |
Correct |
4 ms |
9308 KB |
Output is correct |
41 |
Correct |
4 ms |
9308 KB |
Output is correct |
42 |
Correct |
4 ms |
9052 KB |
Output is correct |
43 |
Correct |
4 ms |
9052 KB |
Output is correct |
44 |
Correct |
4 ms |
9236 KB |
Output is correct |
45 |
Correct |
3 ms |
9240 KB |
Output is correct |
46 |
Correct |
4 ms |
9052 KB |
Output is correct |
47 |
Correct |
3 ms |
8924 KB |
Output is correct |
48 |
Correct |
4 ms |
9052 KB |
Output is correct |
49 |
Correct |
4 ms |
9052 KB |
Output is correct |
50 |
Correct |
4 ms |
9052 KB |
Output is correct |
51 |
Correct |
3 ms |
9048 KB |
Output is correct |
52 |
Correct |
3 ms |
9052 KB |
Output is correct |
53 |
Correct |
3 ms |
9052 KB |
Output is correct |
54 |
Correct |
4 ms |
8964 KB |
Output is correct |
55 |
Correct |
3 ms |
9052 KB |
Output is correct |
56 |
Correct |
3 ms |
9184 KB |
Output is correct |
57 |
Correct |
3 ms |
9052 KB |
Output is correct |
58 |
Correct |
4 ms |
9052 KB |
Output is correct |
59 |
Correct |
3 ms |
9052 KB |
Output is correct |
60 |
Correct |
3 ms |
9032 KB |
Output is correct |
61 |
Correct |
3 ms |
9052 KB |
Output is correct |
62 |
Correct |
3 ms |
8972 KB |
Output is correct |
63 |
Correct |
3 ms |
9052 KB |
Output is correct |
64 |
Correct |
3 ms |
8796 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
6488 KB |
Output is correct |
2 |
Correct |
2 ms |
6492 KB |
Output is correct |
3 |
Correct |
1 ms |
6492 KB |
Output is correct |
4 |
Runtime error |
66 ms |
46320 KB |
Execution killed with signal 11 |
5 |
Halted |
0 ms |
0 KB |
- |