답안 #527121

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
527121 2022-02-17T02:19:28 Z 8e7 Event Hopping 2 (JOI21_event2) C++17
100 / 100
184 ms 17680 KB
//Challenge: Accepted
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
#ifdef zisk
void debug(){cout << endl;}
template<class T, class ... U> void debug(T a, U ... b){cout << a << " ", debug(b...);}
template<class T> void pary(T l, T r) {
	while (l != r) cout << *l << " ", l++;
	cout << endl;
}
#else
#define debug(...) 0
#define pary(...) 0
#endif
#define ll long long
#define maxn 100005
#define pii pair<int, int>
#define ff first
#define ss second
#define io ios_base::sync_with_stdio(0);cin.tie(0);
const int inf = 1<<30;
struct seg{
	int l, r, id;
	seg(){l = r = id = 0;}
	seg(int x, int y, int i){l = x, r = y, id = i;}
} a[maxn], b[maxn];
vector<int> val;
int anc[17][maxn];
int jump(int lind, int rig) {
	int ret = 0, cur = anc[0][lind];	
	if (b[cur].r > rig) return 0;
	ret = 1;
	for (int i = 16;i >= 0;i--) {
		if (b[anc[i][cur]].r <= rig) {
			ret += 1<<i;
			cur = anc[i][cur];
		}
	}
	return ret;	
}
int main() {
	io
	int n, k;
	cin >> n >> k;
	for (int i = 0;i < n;i++) {
		cin >> a[i].l >> a[i].r;
		a[i].id = i;
		val.push_back(a[i].l), val.push_back(a[i].r);
	}
	sort(val.begin(), val.end());
	val.resize(int(unique(val.begin(), val.end()) - val.begin()));
	for (int i = 0;i < n;i++) {
		a[i].l = lower_bound(val.begin(), val.end(), a[i].l) - val.begin();
		a[i].r = lower_bound(val.begin(), val.end(), a[i].r) - val.begin();
		b[i] = a[i];
	}	
	sort(a, a + n, [&] (seg x, seg y){return x.r > y.r;});
	priority_queue<pii, vector<pii>, less<pii> > pq;	
	int best = inf, bind = n;
	b[n] = seg(inf, inf, n);	
	for (int i = 0;i < n;i++) {
		while (pq.size() && pq.top().ff >= a[i].r) {
			if (b[pq.top().ss].r < best) {
				best = b[pq.top().ss].r;
				bind = pq.top().ss;
			}
			pq.pop();
		}
		anc[0][a[i].id] = bind;
		pq.push({a[i].l, a[i].id});
	}
	anc[0][n] = n;
	for (int i = 1;i < 17;i++) {
		for (int j = 0;j <= n;j++) anc[i][j] = anc[i-1][anc[i-1][j]]; 
	}	
	int lid = a[n-1].id;
	int ma = jump(lid, inf - 1) + 1;
	if (ma < k) {
		cout << -1 << endl;
		return 0;
	}
	set<pii> se;
	vector<int> ans;
	for (int i = 0;i < n;i++) {
		pii ins = {b[i].r, i};
		auto ind = se.lower_bound(ins);	
		bool inter = 0;
		int lef = 0, rig = 0, orig = 0;
		if (ind == se.end()) {
			rig = jump(i, inf - 1);	
		} else if (b[ind->ss].l < b[i].r) {
			inter = 1;
		} else {
			rig = jump(i, b[ind->ss].l);
		}
		if (ind == se.begin()) {
			orig++;
			if (b[i].r > a[n-1].r) {
				if (a[n-1].r > b[i].l) lef = 0;
				else lef = jump(lid, b[i].l) + 1;
			}	
		} else if (b[prev(ind)->ss].r > b[i].l) {
			inter = 1;
		} else {
			lef = jump(prev(ind)->ss, b[i].l);
		}
		debug(i, inter);
		if (inter) continue;
		orig += jump(ind == se.begin() ? lid : prev(ind)->ss, ind == se.end() ? inf - 1 : b[ind->ss].l);		
		debug(ma, orig, lef, rig);
		if (ma - orig + lef + rig + 1 >= k) {
			ans.push_back(i);
			se.insert(ins);
			ma = ma - orig + lef + rig + 1;
		}	
		if (ans.size() == k) break;
	}	
	for (int i:ans) cout << i+1 << "\n";
	
}
/*
7 4
1 3
2 5
6 9
3 4
5 7
8 10
10 11
*/

Compilation message

event2.cpp: In function 'int main()':
event2.cpp:13:20: warning: statement has no effect [-Wunused-value]
   13 | #define debug(...) 0
      |                    ^
event2.cpp:108:3: note: in expansion of macro 'debug'
  108 |   debug(i, inter);
      |   ^~~~~
event2.cpp:13:20: warning: statement has no effect [-Wunused-value]
   13 | #define debug(...) 0
      |                    ^
event2.cpp:111:3: note: in expansion of macro 'debug'
  111 |   debug(ma, orig, lef, rig);
      |   ^~~~~
event2.cpp:117:18: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  117 |   if (ans.size() == k) break;
      |       ~~~~~~~~~~~^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2636 KB Output is correct
2 Correct 2 ms 2636 KB Output is correct
3 Correct 2 ms 2636 KB Output is correct
4 Correct 88 ms 15468 KB Output is correct
5 Correct 84 ms 16984 KB Output is correct
6 Correct 84 ms 16708 KB Output is correct
7 Correct 81 ms 16260 KB Output is correct
8 Correct 90 ms 17196 KB Output is correct
9 Correct 86 ms 16956 KB Output is correct
10 Correct 94 ms 16708 KB Output is correct
11 Correct 79 ms 16160 KB Output is correct
12 Correct 74 ms 15252 KB Output is correct
13 Correct 80 ms 15092 KB Output is correct
14 Correct 82 ms 14944 KB Output is correct
15 Correct 66 ms 14528 KB Output is correct
16 Correct 63 ms 12688 KB Output is correct
17 Correct 68 ms 12604 KB Output is correct
18 Correct 59 ms 12684 KB Output is correct
19 Correct 59 ms 12100 KB Output is correct
20 Correct 58 ms 12100 KB Output is correct
21 Correct 60 ms 12148 KB Output is correct
22 Correct 68 ms 12080 KB Output is correct
23 Correct 65 ms 12228 KB Output is correct
24 Correct 64 ms 12164 KB Output is correct
25 Correct 68 ms 12208 KB Output is correct
26 Correct 72 ms 12124 KB Output is correct
27 Correct 70 ms 12144 KB Output is correct
28 Correct 43 ms 12160 KB Output is correct
29 Correct 43 ms 12156 KB Output is correct
30 Correct 48 ms 12076 KB Output is correct
31 Correct 65 ms 12096 KB Output is correct
32 Correct 58 ms 12232 KB Output is correct
33 Correct 65 ms 12184 KB Output is correct
34 Correct 67 ms 14016 KB Output is correct
35 Correct 55 ms 13328 KB Output is correct
36 Correct 59 ms 12616 KB Output is correct
37 Correct 74 ms 14824 KB Output is correct
38 Correct 72 ms 14792 KB Output is correct
39 Correct 68 ms 14576 KB Output is correct
40 Correct 66 ms 14528 KB Output is correct
41 Correct 64 ms 14392 KB Output is correct
42 Correct 55 ms 12072 KB Output is correct
43 Correct 107 ms 14732 KB Output is correct
44 Correct 75 ms 14564 KB Output is correct
45 Correct 79 ms 14424 KB Output is correct
46 Correct 89 ms 14344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2636 KB Output is correct
2 Correct 2 ms 2636 KB Output is correct
3 Correct 2 ms 2636 KB Output is correct
4 Correct 2 ms 2648 KB Output is correct
5 Correct 2 ms 2636 KB Output is correct
6 Correct 1 ms 2636 KB Output is correct
7 Correct 2 ms 2668 KB Output is correct
8 Correct 2 ms 2640 KB Output is correct
9 Correct 2 ms 2640 KB Output is correct
10 Correct 3 ms 2640 KB Output is correct
11 Correct 2 ms 2640 KB Output is correct
12 Correct 2 ms 2640 KB Output is correct
13 Correct 2 ms 2672 KB Output is correct
14 Correct 2 ms 2640 KB Output is correct
15 Correct 2 ms 2640 KB Output is correct
16 Correct 2 ms 2640 KB Output is correct
17 Correct 2 ms 2640 KB Output is correct
18 Correct 2 ms 2640 KB Output is correct
19 Correct 2 ms 2640 KB Output is correct
20 Correct 2 ms 2668 KB Output is correct
21 Correct 2 ms 2640 KB Output is correct
22 Correct 2 ms 2640 KB Output is correct
23 Correct 2 ms 2672 KB Output is correct
24 Correct 2 ms 2668 KB Output is correct
25 Correct 2 ms 2640 KB Output is correct
26 Correct 2 ms 2668 KB Output is correct
27 Correct 2 ms 2640 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2636 KB Output is correct
2 Correct 2 ms 2636 KB Output is correct
3 Correct 2 ms 2636 KB Output is correct
4 Correct 2 ms 2648 KB Output is correct
5 Correct 2 ms 2636 KB Output is correct
6 Correct 1 ms 2636 KB Output is correct
7 Correct 2 ms 2668 KB Output is correct
8 Correct 2 ms 2640 KB Output is correct
9 Correct 2 ms 2640 KB Output is correct
10 Correct 3 ms 2640 KB Output is correct
11 Correct 2 ms 2640 KB Output is correct
12 Correct 2 ms 2640 KB Output is correct
13 Correct 2 ms 2672 KB Output is correct
14 Correct 2 ms 2640 KB Output is correct
15 Correct 2 ms 2640 KB Output is correct
16 Correct 2 ms 2640 KB Output is correct
17 Correct 2 ms 2640 KB Output is correct
18 Correct 2 ms 2640 KB Output is correct
19 Correct 2 ms 2640 KB Output is correct
20 Correct 2 ms 2668 KB Output is correct
21 Correct 2 ms 2640 KB Output is correct
22 Correct 2 ms 2640 KB Output is correct
23 Correct 2 ms 2672 KB Output is correct
24 Correct 2 ms 2668 KB Output is correct
25 Correct 2 ms 2640 KB Output is correct
26 Correct 2 ms 2668 KB Output is correct
27 Correct 2 ms 2640 KB Output is correct
28 Correct 5 ms 3152 KB Output is correct
29 Correct 4 ms 3024 KB Output is correct
30 Correct 4 ms 2940 KB Output is correct
31 Correct 4 ms 3024 KB Output is correct
32 Correct 4 ms 3024 KB Output is correct
33 Correct 3 ms 3024 KB Output is correct
34 Correct 4 ms 2992 KB Output is correct
35 Correct 5 ms 3152 KB Output is correct
36 Correct 5 ms 3152 KB Output is correct
37 Correct 4 ms 3024 KB Output is correct
38 Correct 3 ms 2944 KB Output is correct
39 Correct 5 ms 3068 KB Output is correct
40 Correct 6 ms 3152 KB Output is correct
41 Correct 5 ms 3072 KB Output is correct
42 Correct 5 ms 2944 KB Output is correct
43 Correct 6 ms 3064 KB Output is correct
44 Correct 5 ms 3024 KB Output is correct
45 Correct 4 ms 3068 KB Output is correct
46 Correct 5 ms 3024 KB Output is correct
47 Correct 5 ms 3040 KB Output is correct
48 Correct 4 ms 3048 KB Output is correct
49 Correct 4 ms 3040 KB Output is correct
50 Correct 4 ms 3024 KB Output is correct
51 Correct 4 ms 3024 KB Output is correct
52 Correct 4 ms 3024 KB Output is correct
53 Correct 4 ms 3024 KB Output is correct
54 Correct 4 ms 3024 KB Output is correct
55 Correct 5 ms 3152 KB Output is correct
56 Correct 5 ms 3152 KB Output is correct
57 Correct 5 ms 3152 KB Output is correct
58 Correct 4 ms 3152 KB Output is correct
59 Correct 4 ms 3124 KB Output is correct
60 Correct 4 ms 3152 KB Output is correct
61 Correct 4 ms 3280 KB Output is correct
62 Correct 4 ms 3068 KB Output is correct
63 Correct 4 ms 3068 KB Output is correct
64 Correct 4 ms 3024 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2636 KB Output is correct
2 Correct 2 ms 2636 KB Output is correct
3 Correct 2 ms 2636 KB Output is correct
4 Correct 88 ms 15468 KB Output is correct
5 Correct 84 ms 16984 KB Output is correct
6 Correct 84 ms 16708 KB Output is correct
7 Correct 81 ms 16260 KB Output is correct
8 Correct 90 ms 17196 KB Output is correct
9 Correct 86 ms 16956 KB Output is correct
10 Correct 94 ms 16708 KB Output is correct
11 Correct 79 ms 16160 KB Output is correct
12 Correct 74 ms 15252 KB Output is correct
13 Correct 80 ms 15092 KB Output is correct
14 Correct 82 ms 14944 KB Output is correct
15 Correct 66 ms 14528 KB Output is correct
16 Correct 63 ms 12688 KB Output is correct
17 Correct 68 ms 12604 KB Output is correct
18 Correct 59 ms 12684 KB Output is correct
19 Correct 59 ms 12100 KB Output is correct
20 Correct 58 ms 12100 KB Output is correct
21 Correct 60 ms 12148 KB Output is correct
22 Correct 68 ms 12080 KB Output is correct
23 Correct 65 ms 12228 KB Output is correct
24 Correct 64 ms 12164 KB Output is correct
25 Correct 68 ms 12208 KB Output is correct
26 Correct 72 ms 12124 KB Output is correct
27 Correct 70 ms 12144 KB Output is correct
28 Correct 43 ms 12160 KB Output is correct
29 Correct 43 ms 12156 KB Output is correct
30 Correct 48 ms 12076 KB Output is correct
31 Correct 65 ms 12096 KB Output is correct
32 Correct 58 ms 12232 KB Output is correct
33 Correct 65 ms 12184 KB Output is correct
34 Correct 67 ms 14016 KB Output is correct
35 Correct 55 ms 13328 KB Output is correct
36 Correct 59 ms 12616 KB Output is correct
37 Correct 74 ms 14824 KB Output is correct
38 Correct 72 ms 14792 KB Output is correct
39 Correct 68 ms 14576 KB Output is correct
40 Correct 66 ms 14528 KB Output is correct
41 Correct 64 ms 14392 KB Output is correct
42 Correct 55 ms 12072 KB Output is correct
43 Correct 107 ms 14732 KB Output is correct
44 Correct 75 ms 14564 KB Output is correct
45 Correct 79 ms 14424 KB Output is correct
46 Correct 89 ms 14344 KB Output is correct
47 Correct 2 ms 2636 KB Output is correct
48 Correct 2 ms 2636 KB Output is correct
49 Correct 2 ms 2636 KB Output is correct
50 Correct 2 ms 2648 KB Output is correct
51 Correct 2 ms 2636 KB Output is correct
52 Correct 1 ms 2636 KB Output is correct
53 Correct 2 ms 2668 KB Output is correct
54 Correct 2 ms 2640 KB Output is correct
55 Correct 2 ms 2640 KB Output is correct
56 Correct 3 ms 2640 KB Output is correct
57 Correct 2 ms 2640 KB Output is correct
58 Correct 2 ms 2640 KB Output is correct
59 Correct 2 ms 2672 KB Output is correct
60 Correct 2 ms 2640 KB Output is correct
61 Correct 2 ms 2640 KB Output is correct
62 Correct 2 ms 2640 KB Output is correct
63 Correct 2 ms 2640 KB Output is correct
64 Correct 2 ms 2640 KB Output is correct
65 Correct 2 ms 2640 KB Output is correct
66 Correct 2 ms 2668 KB Output is correct
67 Correct 2 ms 2640 KB Output is correct
68 Correct 2 ms 2640 KB Output is correct
69 Correct 2 ms 2672 KB Output is correct
70 Correct 2 ms 2668 KB Output is correct
71 Correct 2 ms 2640 KB Output is correct
72 Correct 2 ms 2668 KB Output is correct
73 Correct 2 ms 2640 KB Output is correct
74 Correct 5 ms 3152 KB Output is correct
75 Correct 4 ms 3024 KB Output is correct
76 Correct 4 ms 2940 KB Output is correct
77 Correct 4 ms 3024 KB Output is correct
78 Correct 4 ms 3024 KB Output is correct
79 Correct 3 ms 3024 KB Output is correct
80 Correct 4 ms 2992 KB Output is correct
81 Correct 5 ms 3152 KB Output is correct
82 Correct 5 ms 3152 KB Output is correct
83 Correct 4 ms 3024 KB Output is correct
84 Correct 3 ms 2944 KB Output is correct
85 Correct 5 ms 3068 KB Output is correct
86 Correct 6 ms 3152 KB Output is correct
87 Correct 5 ms 3072 KB Output is correct
88 Correct 5 ms 2944 KB Output is correct
89 Correct 6 ms 3064 KB Output is correct
90 Correct 5 ms 3024 KB Output is correct
91 Correct 4 ms 3068 KB Output is correct
92 Correct 5 ms 3024 KB Output is correct
93 Correct 5 ms 3040 KB Output is correct
94 Correct 4 ms 3048 KB Output is correct
95 Correct 4 ms 3040 KB Output is correct
96 Correct 4 ms 3024 KB Output is correct
97 Correct 4 ms 3024 KB Output is correct
98 Correct 4 ms 3024 KB Output is correct
99 Correct 4 ms 3024 KB Output is correct
100 Correct 4 ms 3024 KB Output is correct
101 Correct 5 ms 3152 KB Output is correct
102 Correct 5 ms 3152 KB Output is correct
103 Correct 5 ms 3152 KB Output is correct
104 Correct 4 ms 3152 KB Output is correct
105 Correct 4 ms 3124 KB Output is correct
106 Correct 4 ms 3152 KB Output is correct
107 Correct 4 ms 3280 KB Output is correct
108 Correct 4 ms 3068 KB Output is correct
109 Correct 4 ms 3068 KB Output is correct
110 Correct 4 ms 3024 KB Output is correct
111 Correct 99 ms 12940 KB Output is correct
112 Correct 103 ms 12964 KB Output is correct
113 Correct 93 ms 13072 KB Output is correct
114 Correct 92 ms 12932 KB Output is correct
115 Correct 97 ms 12940 KB Output is correct
116 Correct 88 ms 12944 KB Output is correct
117 Correct 87 ms 12936 KB Output is correct
118 Correct 184 ms 17296 KB Output is correct
119 Correct 155 ms 16848 KB Output is correct
120 Correct 142 ms 14544 KB Output is correct
121 Correct 79 ms 12076 KB Output is correct
122 Correct 141 ms 15192 KB Output is correct
123 Correct 142 ms 14964 KB Output is correct
124 Correct 130 ms 14644 KB Output is correct
125 Correct 76 ms 12052 KB Output is correct
126 Correct 112 ms 12688 KB Output is correct
127 Correct 112 ms 12680 KB Output is correct
128 Correct 95 ms 12612 KB Output is correct
129 Correct 76 ms 12052 KB Output is correct
130 Correct 103 ms 12180 KB Output is correct
131 Correct 95 ms 12100 KB Output is correct
132 Correct 92 ms 12112 KB Output is correct
133 Correct 79 ms 12136 KB Output is correct
134 Correct 102 ms 12096 KB Output is correct
135 Correct 88 ms 12108 KB Output is correct
136 Correct 87 ms 12128 KB Output is correct
137 Correct 81 ms 12172 KB Output is correct
138 Correct 87 ms 12188 KB Output is correct
139 Correct 85 ms 12200 KB Output is correct
140 Correct 86 ms 12184 KB Output is correct
141 Correct 80 ms 12108 KB Output is correct
142 Correct 87 ms 17652 KB Output is correct
143 Correct 89 ms 17600 KB Output is correct
144 Correct 90 ms 17680 KB Output is correct
145 Correct 100 ms 17604 KB Output is correct
146 Correct 95 ms 17508 KB Output is correct
147 Correct 94 ms 17520 KB Output is correct
148 Correct 83 ms 17252 KB Output is correct
149 Correct 87 ms 17108 KB Output is correct
150 Correct 80 ms 17008 KB Output is correct
151 Correct 74 ms 16444 KB Output is correct
152 Correct 41 ms 12116 KB Output is correct
153 Correct 85 ms 17644 KB Output is correct
154 Correct 84 ms 17556 KB Output is correct
155 Correct 87 ms 17484 KB Output is correct
156 Correct 87 ms 17280 KB Output is correct
157 Correct 86 ms 17172 KB Output is correct
158 Correct 102 ms 17016 KB Output is correct
159 Correct 77 ms 16480 KB Output is correct
160 Correct 41 ms 12096 KB Output is correct
161 Correct 144 ms 14892 KB Output is correct
162 Correct 125 ms 14792 KB Output is correct
163 Correct 146 ms 14748 KB Output is correct
164 Correct 123 ms 14480 KB Output is correct
165 Correct 114 ms 14352 KB Output is correct
166 Correct 53 ms 12100 KB Output is correct
167 Correct 93 ms 14796 KB Output is correct
168 Correct 73 ms 14660 KB Output is correct
169 Correct 76 ms 14496 KB Output is correct
170 Correct 87 ms 14316 KB Output is correct
171 Correct 63 ms 14144 KB Output is correct
172 Correct 74 ms 14888 KB Output is correct
173 Correct 134 ms 14804 KB Output is correct
174 Correct 129 ms 14824 KB Output is correct
175 Correct 137 ms 14864 KB Output is correct
176 Correct 120 ms 14208 KB Output is correct