#include <bits/stdc++.h>
#include <cassert>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx,avx2,fma")
using namespace std;
typedef long ll;
typedef pair<ll, ll> pll;
#define MAX 301010
#define MAXS 20
#define INF 1000000000
#define MOD (ll)1000000007
#define bb ' '
#define ln '\n'
template <typename T>
class Segment_Tree {
//0-based index Segment Tree
//O(N), O(lgN)
private:
unsigned int N, s;
vector<T> tree;
vector<unsigned int> l, r;
T query(unsigned int low, unsigned int high, unsigned int loc) {
if (low == l[loc] && high == r[loc]) return tree[loc];
if (high <= r[loc * 2]) return query(low, high, loc * 2);
if (low >= l[loc * 2 + 1]) return query(low, high, loc * 2 + 1);
return query(low, r[loc * 2], loc * 2) + query(l[loc * 2 + 1], high, loc * 2 + 1);
}
void _update(unsigned int loc, T val) {
loc += s;
tree[loc] = val;
loc /= 2;
while (loc) {
tree[loc] = tree[loc * 2] + tree[loc * 2 + 1];
loc /= 2;
}
}
void init(unsigned int x = 1) {
if (x >= s) {
l[x] = r[x] = x - s;
return;
}
init(x * 2);
init(x * 2 + 1);
l[x] = l[x * 2];
r[x] = r[x * 2 + 1];
tree[x] = tree[x * 2] + tree[x * 2 + 1];
}
public:
Segment_Tree<T>() {
}
Segment_Tree<T>(vector<T>& v) {
N = v.size();
s = 1 << (unsigned int)ceil(log2(N));
tree.resize(2 * s + 1);
l.resize(2 * s + 1);
r.resize(2 * s + 1);
unsigned int i;
for (i = 0; i < N; i++) tree[i + s] = v[i];
init();
}
T query(unsigned int low, unsigned int high) { return query(low, high, 1); }
void update(unsigned int location, T new_value) { _update(location, new_value); }
};
struct dat {
ll x, t, a, b;
dat() {}
dat(ll x, ll t, ll a, ll b) :x(x), t(t), a(a), b(b) {}
bool operator<(dat d) {
if (t != d.t) return t < d.t;
if (x != d.x) return x < d.x;
if (a != d.a) return a < d.a;
return b < d.b;
}
};
struct Query {
ll l, y, num;
Query() {}
Query(ll l, ll y, ll num) :l(l), y(y), num(num) {}
bool operator<(Query q) {
return y < q.y;
}
};
map<ll, vector<dat>> arr;
multiset<ll> st[MAX];
vector<Query> query;
ll ans[MAX];
vector<ll> point, tarr;
vector<pll> larr;
ll chk[MAX];
struct node {
ll x, y;
ll lv, rv;
node() :x(0), y(0), lv(0), rv(-INF) {}
node(ll x, ll y) :x(x), y(y) {
lv = x + y;
rv = y - x;
}
node(ll x, ll y, ll lv, ll rv) :x(x), y(y), lv(lv), rv(rv) {}
node operator+(node x) { return node(0, 0, max(lv, x.lv), max(rv, x.rv)); }
};
bool operator<(pll p1, pll p2) {
if (p1.first == p2.first) return p1.second < p2.second;
return p1.first < p2.first;
}
ll getind(pll x) {
return lower_bound(larr.begin(), larr.end(), x) - larr.begin();
}
signed main() {
ios::sync_with_stdio(false), cin.tie(0);
ll N, K, Q;
cin >> N >> K >> Q;
ll i;
ll x, t, a, b;
vector<dat> datset;
for (i = 1; i <= N; i++) {
cin >> x >> t >> a >> b;
arr[a].push_back(dat(x, t, a, b));
arr[b + 1].push_back(dat(x, t, a, b));
tarr.push_back(a);
tarr.push_back(b + 1);
}
for (i = 0; i < Q; i++) {
cin >> a >> b;
query.push_back(Query(a, b, i));
}
sort(query.begin(), query.end());
//simulation
for (i = 1; i <= K; i++) st[i].insert(-INF);
for (i = 1; i <= K; i++) st[i].insert(INF);
map<ll, vector<dat>>::iterator it;
for (it = arr.begin(); it != arr.end(); it++) {
t = it->first;
for (auto d : it->second) {
ll pv = *prev(st[d.t].lower_bound(d.x));
ll ne = *st[d.t].upper_bound(d.x);
if (d.a == t) st[d.t].insert(d.x);
else st[d.t].erase(st[d.t].find(d.x));
larr.emplace_back(pv + ne, d.t);
larr.emplace_back(pv + d.x, d.t);
larr.emplace_back(d.x + ne, d.t);
}
}
Segment_Tree<node> segtree;
vector<node> v(larr.size());
segtree = Segment_Tree<node>(v);
it = arr.begin();
ll cnt = 0;
sort(larr.begin(), larr.end());
larr.erase(unique(larr.begin(), larr.end()), larr.end());
for (i = 0; i < Q; i++) {
Query q = query[i];
while (it != arr.end()) {
ll t = it->first;
if (t > q.y) break;
for (auto d : it->second) {
ll pv = *prev(st[d.t].lower_bound(d.x));
ll ne = *st[d.t].upper_bound(d.x);
if (d.a == t) {
if (st[d.t].find(d.x) == st[d.t].end()) {
segtree.update(getind({ pv + ne, d.t }), node(pv + ne, 0));
segtree.update(getind({ pv + d.x, d.t }), node(pv + d.x, d.x - pv));
segtree.update(getind({ d.x + ne, d.t }), node(d.x + ne, ne - d.x));
}
st[d.t].insert(d.x);
if (!chk[d.t]) cnt++;
chk[d.t]++;
}
else {
st[d.t].erase(st[d.t].find(d.x));
if (chk[d.t] == 1) cnt--;
chk[d.t]--;
if (st[d.t].find(d.x) != st[d.t].end()) continue;
segtree.update(getind({ pv + ne, d.t }), node(pv + ne, ne - pv));
segtree.update(getind({ pv + d.x, d.t }), node(pv + d.x, 0));
segtree.update(getind({ d.x + ne, d.t }), node(d.x + ne, 0));
}
}
it++;
}
if (cnt != K) {
ans[q.num] = -1;
continue;
}
node l = segtree.query(0, getind({ 2 * q.l, 10101010 }) - 1);
node r = segtree.query(getind({ 2 * q.l, -1 }), larr.size() - 1);
ans[q.num] = max(l.lv - 2 * q.l, r.rv + 2 * q.l) / 2;
}
for (i = 0; i < Q; i++) cout << ans[i] << ln;
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
14412 KB |
Output is correct |
2 |
Correct |
9 ms |
14412 KB |
Output is correct |
3 |
Correct |
9 ms |
14412 KB |
Output is correct |
4 |
Correct |
8 ms |
14412 KB |
Output is correct |
5 |
Correct |
10 ms |
14984 KB |
Output is correct |
6 |
Correct |
11 ms |
15052 KB |
Output is correct |
7 |
Correct |
11 ms |
15052 KB |
Output is correct |
8 |
Correct |
10 ms |
15052 KB |
Output is correct |
9 |
Correct |
10 ms |
15052 KB |
Output is correct |
10 |
Correct |
11 ms |
15052 KB |
Output is correct |
11 |
Correct |
10 ms |
14996 KB |
Output is correct |
12 |
Correct |
10 ms |
15052 KB |
Output is correct |
13 |
Correct |
10 ms |
14996 KB |
Output is correct |
14 |
Correct |
10 ms |
15052 KB |
Output is correct |
15 |
Correct |
11 ms |
15072 KB |
Output is correct |
16 |
Correct |
10 ms |
15052 KB |
Output is correct |
17 |
Correct |
11 ms |
15048 KB |
Output is correct |
18 |
Correct |
12 ms |
15000 KB |
Output is correct |
19 |
Correct |
11 ms |
15120 KB |
Output is correct |
20 |
Correct |
10 ms |
15052 KB |
Output is correct |
21 |
Correct |
10 ms |
15052 KB |
Output is correct |
22 |
Correct |
11 ms |
15052 KB |
Output is correct |
23 |
Correct |
11 ms |
15116 KB |
Output is correct |
24 |
Correct |
10 ms |
14996 KB |
Output is correct |
25 |
Correct |
11 ms |
15000 KB |
Output is correct |
26 |
Correct |
10 ms |
15052 KB |
Output is correct |
27 |
Correct |
12 ms |
14924 KB |
Output is correct |
28 |
Correct |
10 ms |
15052 KB |
Output is correct |
29 |
Correct |
10 ms |
15052 KB |
Output is correct |
30 |
Correct |
10 ms |
14864 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
14412 KB |
Output is correct |
2 |
Correct |
9 ms |
14412 KB |
Output is correct |
3 |
Correct |
9 ms |
14412 KB |
Output is correct |
4 |
Correct |
8 ms |
14412 KB |
Output is correct |
5 |
Correct |
10 ms |
14984 KB |
Output is correct |
6 |
Correct |
11 ms |
15052 KB |
Output is correct |
7 |
Correct |
11 ms |
15052 KB |
Output is correct |
8 |
Correct |
10 ms |
15052 KB |
Output is correct |
9 |
Correct |
10 ms |
15052 KB |
Output is correct |
10 |
Correct |
11 ms |
15052 KB |
Output is correct |
11 |
Correct |
10 ms |
14996 KB |
Output is correct |
12 |
Correct |
10 ms |
15052 KB |
Output is correct |
13 |
Correct |
10 ms |
14996 KB |
Output is correct |
14 |
Correct |
10 ms |
15052 KB |
Output is correct |
15 |
Correct |
11 ms |
15072 KB |
Output is correct |
16 |
Correct |
10 ms |
15052 KB |
Output is correct |
17 |
Correct |
11 ms |
15048 KB |
Output is correct |
18 |
Correct |
12 ms |
15000 KB |
Output is correct |
19 |
Correct |
11 ms |
15120 KB |
Output is correct |
20 |
Correct |
10 ms |
15052 KB |
Output is correct |
21 |
Correct |
10 ms |
15052 KB |
Output is correct |
22 |
Correct |
11 ms |
15052 KB |
Output is correct |
23 |
Correct |
11 ms |
15116 KB |
Output is correct |
24 |
Correct |
10 ms |
14996 KB |
Output is correct |
25 |
Correct |
11 ms |
15000 KB |
Output is correct |
26 |
Correct |
10 ms |
15052 KB |
Output is correct |
27 |
Correct |
12 ms |
14924 KB |
Output is correct |
28 |
Correct |
10 ms |
15052 KB |
Output is correct |
29 |
Correct |
10 ms |
15052 KB |
Output is correct |
30 |
Correct |
10 ms |
14864 KB |
Output is correct |
31 |
Correct |
753 ms |
93784 KB |
Output is correct |
32 |
Correct |
245 ms |
81508 KB |
Output is correct |
33 |
Correct |
782 ms |
92020 KB |
Output is correct |
34 |
Correct |
731 ms |
92056 KB |
Output is correct |
35 |
Correct |
852 ms |
93936 KB |
Output is correct |
36 |
Correct |
747 ms |
93616 KB |
Output is correct |
37 |
Correct |
586 ms |
91060 KB |
Output is correct |
38 |
Correct |
570 ms |
91236 KB |
Output is correct |
39 |
Correct |
478 ms |
91024 KB |
Output is correct |
40 |
Correct |
494 ms |
90820 KB |
Output is correct |
41 |
Correct |
638 ms |
90972 KB |
Output is correct |
42 |
Correct |
537 ms |
90888 KB |
Output is correct |
43 |
Correct |
174 ms |
82676 KB |
Output is correct |
44 |
Correct |
642 ms |
91084 KB |
Output is correct |
45 |
Correct |
592 ms |
91068 KB |
Output is correct |
46 |
Correct |
550 ms |
91044 KB |
Output is correct |
47 |
Correct |
400 ms |
89372 KB |
Output is correct |
48 |
Correct |
360 ms |
88900 KB |
Output is correct |
49 |
Correct |
392 ms |
89888 KB |
Output is correct |
50 |
Correct |
411 ms |
90520 KB |
Output is correct |
51 |
Correct |
417 ms |
89620 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2893 ms |
319340 KB |
Output is correct |
2 |
Correct |
3127 ms |
312088 KB |
Output is correct |
3 |
Correct |
2396 ms |
343920 KB |
Output is correct |
4 |
Correct |
2808 ms |
323636 KB |
Output is correct |
5 |
Correct |
3137 ms |
311704 KB |
Output is correct |
6 |
Correct |
3091 ms |
312196 KB |
Output is correct |
7 |
Correct |
1880 ms |
343908 KB |
Output is correct |
8 |
Correct |
2346 ms |
323620 KB |
Output is correct |
9 |
Correct |
2386 ms |
316372 KB |
Output is correct |
10 |
Correct |
2842 ms |
312808 KB |
Output is correct |
11 |
Correct |
1753 ms |
309692 KB |
Output is correct |
12 |
Correct |
1851 ms |
312040 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4737 ms |
341724 KB |
Output is correct |
2 |
Correct |
1424 ms |
311488 KB |
Output is correct |
3 |
Execution timed out |
5025 ms |
340488 KB |
Time limit exceeded |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
14412 KB |
Output is correct |
2 |
Correct |
9 ms |
14412 KB |
Output is correct |
3 |
Correct |
9 ms |
14412 KB |
Output is correct |
4 |
Correct |
8 ms |
14412 KB |
Output is correct |
5 |
Correct |
10 ms |
14984 KB |
Output is correct |
6 |
Correct |
11 ms |
15052 KB |
Output is correct |
7 |
Correct |
11 ms |
15052 KB |
Output is correct |
8 |
Correct |
10 ms |
15052 KB |
Output is correct |
9 |
Correct |
10 ms |
15052 KB |
Output is correct |
10 |
Correct |
11 ms |
15052 KB |
Output is correct |
11 |
Correct |
10 ms |
14996 KB |
Output is correct |
12 |
Correct |
10 ms |
15052 KB |
Output is correct |
13 |
Correct |
10 ms |
14996 KB |
Output is correct |
14 |
Correct |
10 ms |
15052 KB |
Output is correct |
15 |
Correct |
11 ms |
15072 KB |
Output is correct |
16 |
Correct |
10 ms |
15052 KB |
Output is correct |
17 |
Correct |
11 ms |
15048 KB |
Output is correct |
18 |
Correct |
12 ms |
15000 KB |
Output is correct |
19 |
Correct |
11 ms |
15120 KB |
Output is correct |
20 |
Correct |
10 ms |
15052 KB |
Output is correct |
21 |
Correct |
10 ms |
15052 KB |
Output is correct |
22 |
Correct |
11 ms |
15052 KB |
Output is correct |
23 |
Correct |
11 ms |
15116 KB |
Output is correct |
24 |
Correct |
10 ms |
14996 KB |
Output is correct |
25 |
Correct |
11 ms |
15000 KB |
Output is correct |
26 |
Correct |
10 ms |
15052 KB |
Output is correct |
27 |
Correct |
12 ms |
14924 KB |
Output is correct |
28 |
Correct |
10 ms |
15052 KB |
Output is correct |
29 |
Correct |
10 ms |
15052 KB |
Output is correct |
30 |
Correct |
10 ms |
14864 KB |
Output is correct |
31 |
Correct |
753 ms |
93784 KB |
Output is correct |
32 |
Correct |
245 ms |
81508 KB |
Output is correct |
33 |
Correct |
782 ms |
92020 KB |
Output is correct |
34 |
Correct |
731 ms |
92056 KB |
Output is correct |
35 |
Correct |
852 ms |
93936 KB |
Output is correct |
36 |
Correct |
747 ms |
93616 KB |
Output is correct |
37 |
Correct |
586 ms |
91060 KB |
Output is correct |
38 |
Correct |
570 ms |
91236 KB |
Output is correct |
39 |
Correct |
478 ms |
91024 KB |
Output is correct |
40 |
Correct |
494 ms |
90820 KB |
Output is correct |
41 |
Correct |
638 ms |
90972 KB |
Output is correct |
42 |
Correct |
537 ms |
90888 KB |
Output is correct |
43 |
Correct |
174 ms |
82676 KB |
Output is correct |
44 |
Correct |
642 ms |
91084 KB |
Output is correct |
45 |
Correct |
592 ms |
91068 KB |
Output is correct |
46 |
Correct |
550 ms |
91044 KB |
Output is correct |
47 |
Correct |
400 ms |
89372 KB |
Output is correct |
48 |
Correct |
360 ms |
88900 KB |
Output is correct |
49 |
Correct |
392 ms |
89888 KB |
Output is correct |
50 |
Correct |
411 ms |
90520 KB |
Output is correct |
51 |
Correct |
417 ms |
89620 KB |
Output is correct |
52 |
Correct |
627 ms |
99804 KB |
Output is correct |
53 |
Correct |
643 ms |
97956 KB |
Output is correct |
54 |
Correct |
640 ms |
95728 KB |
Output is correct |
55 |
Correct |
583 ms |
94140 KB |
Output is correct |
56 |
Correct |
612 ms |
95520 KB |
Output is correct |
57 |
Correct |
590 ms |
92036 KB |
Output is correct |
58 |
Correct |
610 ms |
94068 KB |
Output is correct |
59 |
Correct |
614 ms |
95516 KB |
Output is correct |
60 |
Correct |
583 ms |
92048 KB |
Output is correct |
61 |
Correct |
269 ms |
88672 KB |
Output is correct |
62 |
Correct |
690 ms |
99868 KB |
Output is correct |
63 |
Correct |
646 ms |
96268 KB |
Output is correct |
64 |
Correct |
653 ms |
94964 KB |
Output is correct |
65 |
Correct |
691 ms |
92416 KB |
Output is correct |
66 |
Correct |
642 ms |
91200 KB |
Output is correct |
67 |
Correct |
437 ms |
81224 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
14412 KB |
Output is correct |
2 |
Correct |
9 ms |
14412 KB |
Output is correct |
3 |
Correct |
9 ms |
14412 KB |
Output is correct |
4 |
Correct |
8 ms |
14412 KB |
Output is correct |
5 |
Correct |
10 ms |
14984 KB |
Output is correct |
6 |
Correct |
11 ms |
15052 KB |
Output is correct |
7 |
Correct |
11 ms |
15052 KB |
Output is correct |
8 |
Correct |
10 ms |
15052 KB |
Output is correct |
9 |
Correct |
10 ms |
15052 KB |
Output is correct |
10 |
Correct |
11 ms |
15052 KB |
Output is correct |
11 |
Correct |
10 ms |
14996 KB |
Output is correct |
12 |
Correct |
10 ms |
15052 KB |
Output is correct |
13 |
Correct |
10 ms |
14996 KB |
Output is correct |
14 |
Correct |
10 ms |
15052 KB |
Output is correct |
15 |
Correct |
11 ms |
15072 KB |
Output is correct |
16 |
Correct |
10 ms |
15052 KB |
Output is correct |
17 |
Correct |
11 ms |
15048 KB |
Output is correct |
18 |
Correct |
12 ms |
15000 KB |
Output is correct |
19 |
Correct |
11 ms |
15120 KB |
Output is correct |
20 |
Correct |
10 ms |
15052 KB |
Output is correct |
21 |
Correct |
10 ms |
15052 KB |
Output is correct |
22 |
Correct |
11 ms |
15052 KB |
Output is correct |
23 |
Correct |
11 ms |
15116 KB |
Output is correct |
24 |
Correct |
10 ms |
14996 KB |
Output is correct |
25 |
Correct |
11 ms |
15000 KB |
Output is correct |
26 |
Correct |
10 ms |
15052 KB |
Output is correct |
27 |
Correct |
12 ms |
14924 KB |
Output is correct |
28 |
Correct |
10 ms |
15052 KB |
Output is correct |
29 |
Correct |
10 ms |
15052 KB |
Output is correct |
30 |
Correct |
10 ms |
14864 KB |
Output is correct |
31 |
Correct |
753 ms |
93784 KB |
Output is correct |
32 |
Correct |
245 ms |
81508 KB |
Output is correct |
33 |
Correct |
782 ms |
92020 KB |
Output is correct |
34 |
Correct |
731 ms |
92056 KB |
Output is correct |
35 |
Correct |
852 ms |
93936 KB |
Output is correct |
36 |
Correct |
747 ms |
93616 KB |
Output is correct |
37 |
Correct |
586 ms |
91060 KB |
Output is correct |
38 |
Correct |
570 ms |
91236 KB |
Output is correct |
39 |
Correct |
478 ms |
91024 KB |
Output is correct |
40 |
Correct |
494 ms |
90820 KB |
Output is correct |
41 |
Correct |
638 ms |
90972 KB |
Output is correct |
42 |
Correct |
537 ms |
90888 KB |
Output is correct |
43 |
Correct |
174 ms |
82676 KB |
Output is correct |
44 |
Correct |
642 ms |
91084 KB |
Output is correct |
45 |
Correct |
592 ms |
91068 KB |
Output is correct |
46 |
Correct |
550 ms |
91044 KB |
Output is correct |
47 |
Correct |
400 ms |
89372 KB |
Output is correct |
48 |
Correct |
360 ms |
88900 KB |
Output is correct |
49 |
Correct |
392 ms |
89888 KB |
Output is correct |
50 |
Correct |
411 ms |
90520 KB |
Output is correct |
51 |
Correct |
417 ms |
89620 KB |
Output is correct |
52 |
Correct |
2893 ms |
319340 KB |
Output is correct |
53 |
Correct |
3127 ms |
312088 KB |
Output is correct |
54 |
Correct |
2396 ms |
343920 KB |
Output is correct |
55 |
Correct |
2808 ms |
323636 KB |
Output is correct |
56 |
Correct |
3137 ms |
311704 KB |
Output is correct |
57 |
Correct |
3091 ms |
312196 KB |
Output is correct |
58 |
Correct |
1880 ms |
343908 KB |
Output is correct |
59 |
Correct |
2346 ms |
323620 KB |
Output is correct |
60 |
Correct |
2386 ms |
316372 KB |
Output is correct |
61 |
Correct |
2842 ms |
312808 KB |
Output is correct |
62 |
Correct |
1753 ms |
309692 KB |
Output is correct |
63 |
Correct |
1851 ms |
312040 KB |
Output is correct |
64 |
Correct |
4737 ms |
341724 KB |
Output is correct |
65 |
Correct |
1424 ms |
311488 KB |
Output is correct |
66 |
Execution timed out |
5025 ms |
340488 KB |
Time limit exceeded |
67 |
Halted |
0 ms |
0 KB |
- |