# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
414898 |
2021-05-31T10:27:37 Z |
반딧불(#7587) |
Event Hopping 2 (JOI21_event2) |
C++17 |
|
3000 ms |
29864 KB |
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct dat{
int l, r, idx;
dat(){}
dat(int l, int r, int idx): l(l), r(r), idx(idx){}
};
struct Range{
int l, r, val;
Range(){}
Range(int l, int r, int val): l(l), r(r), val(val){}
bool operator<(const Range &nxt)const{
if(l != nxt.l) return l<nxt.l;
return val < nxt.val;
}
};
struct segmentTree{
int tree[800002], lazy[800002];
void init(int i, int l, int r){
tree[i] = lazy[i] = 0;
if(l==r) return;
int m = (l+r)>>1;
init(i*2, l, m);
init(i*2+1, m+1, r);
}
void propagate(int i, int l, int r){
if(!lazy[i]) return;
tree[i] = lazy[i];
if(l!=r) lazy[i*2] = lazy[i*2+1] = lazy[i];
lazy[i] = 0;
}
int getVal(int i, int l, int r, int idx){
propagate(i, l, r);
if(l==r) return tree[i];
int m = (l+r)>>1;
if(idx <= m) return getVal(i*2, l, m, idx);
return getVal(i*2+1, m+1, r, idx);
}
void rangeUpdate(int i, int l, int r, int s, int e, int val){
propagate(i, l, r);
if(r<s || e<l) return;
if(s<=l && r<=e){
lazy[i] = val;
propagate(i, l, r);
return;
}
int m = (l+r)>>1;
rangeUpdate(i*2, l, m, s, e, val);
rangeUpdate(i*2+1, m+1, r, s, e, val);
}
} tree;
int n, m, k;
dat arr[100002];
int lSparse[100002][20], rSparse[100002][20];
vector<int> ans;
int sum;
set<Range> st;
void renumber(){
vector<int> vec;
for(int i=1; i<=n; i++) vec.push_back(arr[i].l), vec.push_back(arr[i].r);
sort(vec.begin(), vec.end());
vec.erase(unique(vec.begin(), vec.end()), vec.end());
m = (int)vec.size();
for(int i=1; i<=n; i++){
arr[i].l = lower_bound(vec.begin(), vec.end(), arr[i].l) - vec.begin() + 1;
arr[i].r = lower_bound(vec.begin(), vec.end(), arr[i].r) - vec.begin() + 1;
}
}
void makeSparse(){
vector<dat> vec (arr+1, arr+n+1);
tree.init(1, 1, m);
sort(vec.begin(), vec.end(), [&](dat x, dat y){
return x.l < y.l;
});
for(auto p: vec){
lSparse[p.idx][0] = tree.getVal(1, 1, m, p.l);
tree.rangeUpdate(1, 1, m, p.r, m, p.idx);
}
tree.init(1, 1, m);
sort(vec.begin(), vec.end(), [&](dat x, dat y){
return x.r > y.r;
});
for(auto p: vec){
rSparse[p.idx][0] = tree.getVal(1, 1, m, p.r);
tree.rangeUpdate(1, 1, m, 1, p.l, p.idx);
}
}
int main(){
scanf("%d %d", &n, &k);
for(int i=1; i<=n; i++){
scanf("%d %d", &arr[i].l, &arr[i].r);
arr[i].idx = i;
}
renumber();
makeSparse();
for(int d=1; d<20; d++){
for(int i=1; i<=n; i++){
lSparse[i][d] = lSparse[lSparse[i][d-1]][d-1];
rSparse[i][d] = rSparse[rSparse[i][d-1]][d-1];
}
}
int maxAble = 0;
for(int i=1; i<=n; i++){
int dCnt = 1;
for(int d=19; d>=0; d--){
if(rSparse[i][d]){
dCnt += (1<<d);
i = rSparse[i][d];
}
}
maxAble = max(maxAble, dCnt);
}
st.insert(Range(1, m, maxAble));
sum = maxAble;
for(int i=1; i<=n; i++){
auto it = st.lower_bound(Range(arr[i].l, 0, 1e9));
if(it == st.begin()) continue;
--it;
if(!(it->l <= arr[i].l && arr[i].r <= it->r)) continue;
int lVal = 0, rVal = 0, tmp = i;
for(int d=19; d>=0; d--){
if(!lSparse[tmp][d] || arr[lSparse[tmp][d]].l < it->l) continue;
lVal += (1<<d);
tmp = lSparse[tmp][d];
}
tmp = i;
for(int d=19; d>=0; d--){
if(!rSparse[tmp][d] || arr[rSparse[tmp][d]].r > it->r) continue;
rVal += (1<<d);
tmp = rSparse[tmp][d];
}
if(sum - it->val + (lVal + rVal + 1) < k) continue;
ans.push_back(i);
int tL = it->l, tR = it->r;
sum -= it->val;
sum += lVal + rVal + 1;
st.erase(it);
st.insert(Range(tL, arr[i].l, lVal));
st.insert(Range(arr[i].r, tR, rVal));
}
if((int)ans.size() < k) printf("-1");
else{
for(int i=0; i<k; i++) printf("%d\n", ans[i]);
}
}
Compilation message
event2.cpp: In function 'int main()':
event2.cpp:108:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
108 | scanf("%d %d", &n, &k);
| ~~~~~^~~~~~~~~~~~~~~~~
event2.cpp:110:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
110 | scanf("%d %d", &arr[i].l, &arr[i].r);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
332 KB |
Output is correct |
2 |
Correct |
1 ms |
332 KB |
Output is correct |
3 |
Correct |
1 ms |
300 KB |
Output is correct |
4 |
Correct |
239 ms |
29832 KB |
Output is correct |
5 |
Correct |
219 ms |
29756 KB |
Output is correct |
6 |
Correct |
217 ms |
29864 KB |
Output is correct |
7 |
Correct |
231 ms |
29728 KB |
Output is correct |
8 |
Correct |
217 ms |
29800 KB |
Output is correct |
9 |
Correct |
230 ms |
29820 KB |
Output is correct |
10 |
Correct |
217 ms |
29784 KB |
Output is correct |
11 |
Correct |
224 ms |
29708 KB |
Output is correct |
12 |
Correct |
204 ms |
27480 KB |
Output is correct |
13 |
Correct |
195 ms |
27216 KB |
Output is correct |
14 |
Correct |
205 ms |
27264 KB |
Output is correct |
15 |
Correct |
194 ms |
27124 KB |
Output is correct |
16 |
Correct |
161 ms |
24336 KB |
Output is correct |
17 |
Correct |
161 ms |
24400 KB |
Output is correct |
18 |
Correct |
163 ms |
24456 KB |
Output is correct |
19 |
Correct |
153 ms |
24400 KB |
Output is correct |
20 |
Correct |
171 ms |
24384 KB |
Output is correct |
21 |
Correct |
155 ms |
24344 KB |
Output is correct |
22 |
Correct |
163 ms |
24404 KB |
Output is correct |
23 |
Correct |
166 ms |
24472 KB |
Output is correct |
24 |
Correct |
180 ms |
24428 KB |
Output is correct |
25 |
Correct |
170 ms |
24628 KB |
Output is correct |
26 |
Correct |
172 ms |
24420 KB |
Output is correct |
27 |
Correct |
178 ms |
24432 KB |
Output is correct |
28 |
Correct |
154 ms |
24384 KB |
Output is correct |
29 |
Correct |
156 ms |
24348 KB |
Output is correct |
30 |
Correct |
182 ms |
24384 KB |
Output is correct |
31 |
Correct |
158 ms |
24424 KB |
Output is correct |
32 |
Correct |
169 ms |
24524 KB |
Output is correct |
33 |
Correct |
213 ms |
24404 KB |
Output is correct |
34 |
Correct |
193 ms |
27244 KB |
Output is correct |
35 |
Correct |
206 ms |
27040 KB |
Output is correct |
36 |
Correct |
190 ms |
26996 KB |
Output is correct |
37 |
Correct |
187 ms |
26836 KB |
Output is correct |
38 |
Correct |
188 ms |
26732 KB |
Output is correct |
39 |
Correct |
184 ms |
26748 KB |
Output is correct |
40 |
Correct |
185 ms |
26656 KB |
Output is correct |
41 |
Correct |
188 ms |
26656 KB |
Output is correct |
42 |
Correct |
167 ms |
24352 KB |
Output is correct |
43 |
Correct |
205 ms |
26520 KB |
Output is correct |
44 |
Correct |
249 ms |
26428 KB |
Output is correct |
45 |
Correct |
194 ms |
26276 KB |
Output is correct |
46 |
Correct |
200 ms |
26168 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
332 KB |
Output is correct |
2 |
Correct |
1 ms |
332 KB |
Output is correct |
3 |
Correct |
1 ms |
332 KB |
Output is correct |
4 |
Execution timed out |
3066 ms |
332 KB |
Time limit exceeded |
5 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
332 KB |
Output is correct |
2 |
Correct |
1 ms |
332 KB |
Output is correct |
3 |
Correct |
1 ms |
332 KB |
Output is correct |
4 |
Execution timed out |
3066 ms |
332 KB |
Time limit exceeded |
5 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
332 KB |
Output is correct |
2 |
Correct |
1 ms |
332 KB |
Output is correct |
3 |
Correct |
1 ms |
300 KB |
Output is correct |
4 |
Correct |
239 ms |
29832 KB |
Output is correct |
5 |
Correct |
219 ms |
29756 KB |
Output is correct |
6 |
Correct |
217 ms |
29864 KB |
Output is correct |
7 |
Correct |
231 ms |
29728 KB |
Output is correct |
8 |
Correct |
217 ms |
29800 KB |
Output is correct |
9 |
Correct |
230 ms |
29820 KB |
Output is correct |
10 |
Correct |
217 ms |
29784 KB |
Output is correct |
11 |
Correct |
224 ms |
29708 KB |
Output is correct |
12 |
Correct |
204 ms |
27480 KB |
Output is correct |
13 |
Correct |
195 ms |
27216 KB |
Output is correct |
14 |
Correct |
205 ms |
27264 KB |
Output is correct |
15 |
Correct |
194 ms |
27124 KB |
Output is correct |
16 |
Correct |
161 ms |
24336 KB |
Output is correct |
17 |
Correct |
161 ms |
24400 KB |
Output is correct |
18 |
Correct |
163 ms |
24456 KB |
Output is correct |
19 |
Correct |
153 ms |
24400 KB |
Output is correct |
20 |
Correct |
171 ms |
24384 KB |
Output is correct |
21 |
Correct |
155 ms |
24344 KB |
Output is correct |
22 |
Correct |
163 ms |
24404 KB |
Output is correct |
23 |
Correct |
166 ms |
24472 KB |
Output is correct |
24 |
Correct |
180 ms |
24428 KB |
Output is correct |
25 |
Correct |
170 ms |
24628 KB |
Output is correct |
26 |
Correct |
172 ms |
24420 KB |
Output is correct |
27 |
Correct |
178 ms |
24432 KB |
Output is correct |
28 |
Correct |
154 ms |
24384 KB |
Output is correct |
29 |
Correct |
156 ms |
24348 KB |
Output is correct |
30 |
Correct |
182 ms |
24384 KB |
Output is correct |
31 |
Correct |
158 ms |
24424 KB |
Output is correct |
32 |
Correct |
169 ms |
24524 KB |
Output is correct |
33 |
Correct |
213 ms |
24404 KB |
Output is correct |
34 |
Correct |
193 ms |
27244 KB |
Output is correct |
35 |
Correct |
206 ms |
27040 KB |
Output is correct |
36 |
Correct |
190 ms |
26996 KB |
Output is correct |
37 |
Correct |
187 ms |
26836 KB |
Output is correct |
38 |
Correct |
188 ms |
26732 KB |
Output is correct |
39 |
Correct |
184 ms |
26748 KB |
Output is correct |
40 |
Correct |
185 ms |
26656 KB |
Output is correct |
41 |
Correct |
188 ms |
26656 KB |
Output is correct |
42 |
Correct |
167 ms |
24352 KB |
Output is correct |
43 |
Correct |
205 ms |
26520 KB |
Output is correct |
44 |
Correct |
249 ms |
26428 KB |
Output is correct |
45 |
Correct |
194 ms |
26276 KB |
Output is correct |
46 |
Correct |
200 ms |
26168 KB |
Output is correct |
47 |
Correct |
1 ms |
332 KB |
Output is correct |
48 |
Correct |
1 ms |
332 KB |
Output is correct |
49 |
Correct |
1 ms |
332 KB |
Output is correct |
50 |
Execution timed out |
3066 ms |
332 KB |
Time limit exceeded |
51 |
Halted |
0 ms |
0 KB |
- |