#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5+10;
template <typename T>
struct implicit_segment_tree {
T neutral;
int size, max_size;
function<T(T, T)> join;
vector<T> values;
vector<int> left, right;
implicit_segment_tree(int _max_size, T _neutral, function<T(T, T)> f, int reserve_size = 1) {
join = f;
neutral = _neutral;
size = 0;
max_size = _max_size;
values.reserve(reserve_size);
left.reserve(reserve_size);
right.reserve(reserve_size);
insert_node(neutral);
}
T get_val(int pos) {
if(pos < 0 || pos >= (int)values.size()) return neutral;
return values[pos];
}
void insert_node(T val) {
values.push_back(val);
left.push_back(-1);
right.push_back(-1);
++size;
}
void point_update(int id, T val) {
point_update(0, max_size, id, val, 0);
}
void point_update(int l, int r, int x, T val, int p) {
int middle = l + r >> 1;
if(l == r) {
values[p] = val;
return;
}
if(x <= middle) {
if(left[p] == -1) {
left[p] = size;
insert_node(neutral);
}
point_update(l, middle, x, val, left[p]);
} else {
if(right[p] == -1) {
right[p] = size;
insert_node(neutral);
}
point_update(middle+1, r, x, val, right[p]);
}
values[p] = join(get_val(left[p]), get_val(right[p]));
}
T get(int id) {
return query(id, id);
}
T query(int L, int R) {
if(L > R) return neutral;
return query(0, max_size, L, R, 0);
}
T query(int l, int r, int L, int R, int p) {
if(L > r || l > R || p == -1) return neutral;
if(L <= l && R >= r) return get_val(p);
int middle = l + r >> 1;
T lft = query(l, middle, L, R, left[p]);
T rgh = query(middle+1, r, L, R, right[p]);
return join(lft, rgh);
}
void print_tree(int n) {
for(int i = 1; i <= n; ++i) {
cout << get(i) << " \n"[i == n];
}
}
};
struct point {
int x, y, sum, id;
bool operator < (const point &other) {
return sum < other.sum;
}
};
main() {
ios::sync_with_stdio(0); cin.tie(0);
int n, m;
cin >> n >> m;
vector<point> a(n), b(m);
for(int i = 0; i < n; ++i) {
cin >> a[i].x >> a[i].y;
a[i].sum = a[i].x + a[i].y;
}
for(int i = 0; i < m; ++i) {
cin >> b[i].x >> b[i].y >> b[i].sum;
b[i].sum = max(b[i].sum, b[i].x + b[i].y);
b[i].id = i;
}
sort(a.begin(), a.end());
sort(b.begin(), b.end());
vector<int> ans(m);
auto sum = [](int x, int y) -> int {
return x + y;
};
implicit_segment_tree<int> tx(INT_MAX, 0, sum, 5e6);
implicit_segment_tree<int> ty(INT_MAX, 0, sum, 5e6);
for(int i = m - 1, j = n - 1; i >= 0; --i) {
while(j >= 0 && a[j].sum >= b[i].sum) {
int upd_x = tx.get(a[j].x) + 1;
int upd_y = ty.get(a[j].y) + 1;
tx.point_update(a[j].x, upd_x);
ty.point_update(a[j].y, upd_y);
--j;
}
ans[b[i].id] = n - j - 1 - tx.query(0, b[i].x - 1) - ty.query(0, b[i].y - 1);
}
for(int x : ans) {
cout << x << ' ';
}
}
Compilation message
examination.cpp:91:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
91 | main() {
| ^
examination.cpp: In instantiation of 'void implicit_segment_tree<T>::point_update(long long int, long long int, long long int, T, long long int) [with T = long long int]':
examination.cpp:36:3: required from 'void implicit_segment_tree<T>::point_update(long long int, T) [with T = long long int]'
examination.cpp:117:33: required from here
examination.cpp:40:18: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
40 | int middle = l + r >> 1;
| ~~^~~
examination.cpp: In instantiation of 'T implicit_segment_tree<T>::query(long long int, long long int, long long int, long long int, long long int) [with T = long long int]':
examination.cpp:67:36: required from 'T implicit_segment_tree<T>::query(long long int, long long int) [with T = long long int]'
examination.cpp:121:52: required from here
examination.cpp:73:18: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
73 | int middle = l + r >> 1;
| ~~^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
364 KB |
Output is correct |
2 |
Correct |
1 ms |
364 KB |
Output is correct |
3 |
Correct |
1 ms |
364 KB |
Output is correct |
4 |
Correct |
1 ms |
364 KB |
Output is correct |
5 |
Correct |
1 ms |
364 KB |
Output is correct |
6 |
Correct |
1 ms |
364 KB |
Output is correct |
7 |
Correct |
13 ms |
3436 KB |
Output is correct |
8 |
Correct |
13 ms |
3436 KB |
Output is correct |
9 |
Correct |
13 ms |
3436 KB |
Output is correct |
10 |
Correct |
11 ms |
2028 KB |
Output is correct |
11 |
Correct |
11 ms |
2028 KB |
Output is correct |
12 |
Correct |
9 ms |
768 KB |
Output is correct |
13 |
Correct |
14 ms |
3584 KB |
Output is correct |
14 |
Correct |
13 ms |
3436 KB |
Output is correct |
15 |
Correct |
13 ms |
3436 KB |
Output is correct |
16 |
Correct |
10 ms |
2048 KB |
Output is correct |
17 |
Correct |
10 ms |
2028 KB |
Output is correct |
18 |
Correct |
8 ms |
748 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
506 ms |
15724 KB |
Output is correct |
2 |
Correct |
491 ms |
16108 KB |
Output is correct |
3 |
Correct |
498 ms |
16108 KB |
Output is correct |
4 |
Correct |
339 ms |
12396 KB |
Output is correct |
5 |
Correct |
336 ms |
12532 KB |
Output is correct |
6 |
Correct |
277 ms |
8684 KB |
Output is correct |
7 |
Correct |
504 ms |
15724 KB |
Output is correct |
8 |
Correct |
461 ms |
15596 KB |
Output is correct |
9 |
Correct |
460 ms |
15724 KB |
Output is correct |
10 |
Correct |
308 ms |
11756 KB |
Output is correct |
11 |
Correct |
312 ms |
11856 KB |
Output is correct |
12 |
Correct |
197 ms |
7916 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
506 ms |
15724 KB |
Output is correct |
2 |
Correct |
491 ms |
16108 KB |
Output is correct |
3 |
Correct |
498 ms |
16108 KB |
Output is correct |
4 |
Correct |
339 ms |
12396 KB |
Output is correct |
5 |
Correct |
336 ms |
12532 KB |
Output is correct |
6 |
Correct |
277 ms |
8684 KB |
Output is correct |
7 |
Correct |
504 ms |
15724 KB |
Output is correct |
8 |
Correct |
461 ms |
15596 KB |
Output is correct |
9 |
Correct |
460 ms |
15724 KB |
Output is correct |
10 |
Correct |
308 ms |
11756 KB |
Output is correct |
11 |
Correct |
312 ms |
11856 KB |
Output is correct |
12 |
Correct |
197 ms |
7916 KB |
Output is correct |
13 |
Correct |
477 ms |
15724 KB |
Output is correct |
14 |
Correct |
531 ms |
15800 KB |
Output is correct |
15 |
Correct |
510 ms |
15596 KB |
Output is correct |
16 |
Correct |
399 ms |
11884 KB |
Output is correct |
17 |
Correct |
322 ms |
12012 KB |
Output is correct |
18 |
Correct |
291 ms |
8300 KB |
Output is correct |
19 |
Correct |
509 ms |
15624 KB |
Output is correct |
20 |
Correct |
520 ms |
15844 KB |
Output is correct |
21 |
Correct |
508 ms |
15704 KB |
Output is correct |
22 |
Correct |
345 ms |
11756 KB |
Output is correct |
23 |
Correct |
314 ms |
11820 KB |
Output is correct |
24 |
Correct |
204 ms |
7916 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
364 KB |
Output is correct |
2 |
Correct |
1 ms |
364 KB |
Output is correct |
3 |
Correct |
1 ms |
364 KB |
Output is correct |
4 |
Correct |
1 ms |
364 KB |
Output is correct |
5 |
Correct |
1 ms |
364 KB |
Output is correct |
6 |
Correct |
1 ms |
364 KB |
Output is correct |
7 |
Correct |
13 ms |
3436 KB |
Output is correct |
8 |
Correct |
13 ms |
3436 KB |
Output is correct |
9 |
Correct |
13 ms |
3436 KB |
Output is correct |
10 |
Correct |
11 ms |
2028 KB |
Output is correct |
11 |
Correct |
11 ms |
2028 KB |
Output is correct |
12 |
Correct |
9 ms |
768 KB |
Output is correct |
13 |
Correct |
14 ms |
3584 KB |
Output is correct |
14 |
Correct |
13 ms |
3436 KB |
Output is correct |
15 |
Correct |
13 ms |
3436 KB |
Output is correct |
16 |
Correct |
10 ms |
2048 KB |
Output is correct |
17 |
Correct |
10 ms |
2028 KB |
Output is correct |
18 |
Correct |
8 ms |
748 KB |
Output is correct |
19 |
Correct |
506 ms |
15724 KB |
Output is correct |
20 |
Correct |
491 ms |
16108 KB |
Output is correct |
21 |
Correct |
498 ms |
16108 KB |
Output is correct |
22 |
Correct |
339 ms |
12396 KB |
Output is correct |
23 |
Correct |
336 ms |
12532 KB |
Output is correct |
24 |
Correct |
277 ms |
8684 KB |
Output is correct |
25 |
Correct |
504 ms |
15724 KB |
Output is correct |
26 |
Correct |
461 ms |
15596 KB |
Output is correct |
27 |
Correct |
460 ms |
15724 KB |
Output is correct |
28 |
Correct |
308 ms |
11756 KB |
Output is correct |
29 |
Correct |
312 ms |
11856 KB |
Output is correct |
30 |
Correct |
197 ms |
7916 KB |
Output is correct |
31 |
Correct |
477 ms |
15724 KB |
Output is correct |
32 |
Correct |
531 ms |
15800 KB |
Output is correct |
33 |
Correct |
510 ms |
15596 KB |
Output is correct |
34 |
Correct |
399 ms |
11884 KB |
Output is correct |
35 |
Correct |
322 ms |
12012 KB |
Output is correct |
36 |
Correct |
291 ms |
8300 KB |
Output is correct |
37 |
Correct |
509 ms |
15624 KB |
Output is correct |
38 |
Correct |
520 ms |
15844 KB |
Output is correct |
39 |
Correct |
508 ms |
15704 KB |
Output is correct |
40 |
Correct |
345 ms |
11756 KB |
Output is correct |
41 |
Correct |
314 ms |
11820 KB |
Output is correct |
42 |
Correct |
204 ms |
7916 KB |
Output is correct |
43 |
Correct |
639 ms |
76012 KB |
Output is correct |
44 |
Correct |
654 ms |
75928 KB |
Output is correct |
45 |
Correct |
703 ms |
77156 KB |
Output is correct |
46 |
Correct |
340 ms |
43508 KB |
Output is correct |
47 |
Correct |
339 ms |
43372 KB |
Output is correct |
48 |
Correct |
251 ms |
8852 KB |
Output is correct |
49 |
Correct |
670 ms |
77604 KB |
Output is correct |
50 |
Correct |
650 ms |
77548 KB |
Output is correct |
51 |
Correct |
648 ms |
77548 KB |
Output is correct |
52 |
Correct |
330 ms |
43364 KB |
Output is correct |
53 |
Correct |
333 ms |
42920 KB |
Output is correct |