#include <bits/stdc++.h>
#pragma GCC optimize ("Ofast,unroll-loops")
#pragma GCC optimize("no-stack-protector,fast-math")
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<pii, int> piii;
typedef pair<pii, pii> pi4;
#define debug(x) cerr<<#x<<'='<<(x)<<endl;
#define debugp(x) cerr<<#x<<"= {"<<(x.first)<<", "<<(x.second)<<"}"<<endl;
#define debug2(x, y) cerr<<"{"<<#x<<", "<<#y<<"} = {"<<(x)<<", "<<(y)<<"}"<<endl;
#define debugv(v) {cerr<<#v<<" : ";for (auto x:v) cerr<<x<<' ';cerr<<endl;}
#define all(x) x.begin(), x.end()
#define pb push_back
#define kill(x) return cout<<x<<'\n', 0;
const ld eps=1e-7;
const int inf=1000000010;
const ll INF=10000000000000010LL;
const int mod=1000000007;
const int MAXN=300020, LOG=20;
int Todo;
pair<int*, int> todo[50000000];
struct SEGMENT{
int seg[MAXN<<1];
SEGMENT(){
memset(seg, -31, sizeof(seg));
}
int upd(int pos, int val){
if (seg[pos]>=val) return 0;
todo[Todo++]={seg+pos, seg[pos]};
seg[pos]=val;
return 1;
}
int Maximize(int l, int r, int val){
int res=0;
for (l+=MAXN, r+=MAXN; l<r; l>>=1, r>>=1){
if (l&1) res+=upd(l++, val);
if (r&1) res+=upd(--r, val);
}
return res;
}
int Get(int pos){
int res=seg[0];
for (pos+=MAXN; pos; pos>>=1) res=max(res, seg[pos]);
return res;
}
} seg1, seg2;
inline void undo(){
Todo--;
(*todo[Todo].first)=todo[Todo].second;
}
int n, m, k, u, v, x, y, t, a, b, timer;
int typ[MAXN], X[MAXN], T[MAXN], A[MAXN], B[MAXN], L[MAXN], Y[MAXN];
int ans[MAXN];
vector<int> Q1[MAXN], Q2[MAXN], Q[MAXN];
vector<pi4> seg[MAXN<<2];
vector<int> compt={0, inf}, compx={0, inf+1};
multiset<int> st[MAXN];
map<pi4, int> mp;
void Add(int id, int tl, int tr, int l, int r, pi4 p){
// if (id==1) cerr<<"event in times:"<<l<<","<<r<<" : ["<<p.first.first<<", "<<p.first.second<<") "<<p.second.first<<' '<<p.second.second<<endl;
if (r<=tl || tr<=l) return ;
if (l<=tl && tr<=r){
seg[id].pb(p);
return ;
}
int mid=(tl+tr)>>1;
Add(id<<1, tl, mid, l, r, p);
Add(id<<1 | 1, mid, tr, l, r, p);
}
inline void f(pi4 p){
if (!mp.count(p)) mp[p]=timer;
else{
Add(1, 0, MAXN, mp[p], timer, p);
mp.erase(p);
}
}
inline void add(multiset<int> &st, int typ, int x){
// cerr<<"add in time "<<timer<<" : "<<typ<<", "<<x<<endl;
if (st.count(x)){
st.insert(x);
return ;
}
st.insert(x);
auto it=st.find(x);
int prv=*--it, nxt=*++++it;
f({{prv, (prv+nxt+1)/2}, {typ, 1}});
f({{(prv+nxt+1)/2, nxt+1}, {typ, 2}});
f({{prv, (prv+x+1)/2}, {typ, 1}});
f({{(prv+x+1)/2, x+1}, {typ, 2}});
f({{x, (x+nxt+1)/2}, {typ, 1}});
f({{(x+nxt+1)/2, nxt+1}, {typ, 2}});
}
inline void rem(multiset<int> &st, int typ, int x){
// cerr<<"rem in time "<<timer<<" : "<<typ<<", "<<x<<endl;
st.erase(st.find(x));
if (st.count(x)) return ;
auto it=st.lower_bound(x);
int nxt=*it, prv=*--it;
f({{prv, (prv+nxt+1)/2}, {typ, 1}});
f({{(prv+nxt+1)/2, nxt+1}, {typ, 2}});
f({{prv, (prv+x+1)/2}, {typ, 1}});
f({{(prv+x+1)/2, x+1}, {typ, 2}});
f({{x, (x+nxt+1)/2}, {typ, 1}});
f({{(x+nxt+1)/2, nxt+1}, {typ, 2}});
}
inline int gt(int x){
return lower_bound(all(compx), x)-compx.begin();
}
void dfs(int id, int tl, int tr){
int ted=0;
for (pi4 p:seg[id]){
if (p.second.second==1) ted+=seg1.Maximize(gt(p.first.first), gt(p.first.second), -p.first.first);
if (p.second.second==2) ted+=seg2.Maximize(gt(p.first.first), gt(p.first.second), p.first.second-1);
}
if (tr-tl==1){
for (int i:Q[tl]){
ans[i]=max(ans[i], L[i]+seg1.Get(gt(L[i])));
// debug(ans[i])
ans[i]=max(ans[i], seg2.Get(gt(L[i]))-L[i]);
if (ans[i]>100000000) ans[i]=-1;
}
}
else{
int mid=(tl+tr)>>1;
dfs(id<<1, tl, mid);
dfs(id<<1 | 1, mid, tr);
}
while (ted--) undo();
}
int main(){
ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
cin>>n>>k>>m;
for (int i=1; i<=k; i++){
st[i].insert(-inf);
st[i].insert(inf);
f({{0, inf+1}, {i, 2}});
f({{-inf, 0}, {i, 1}});
}
for (int i=1; i<=n; i++) cin>>X[i]>>T[i]>>A[i]>>B[i], B[i]++;
for (int i=1; i<=m; i++){
cin>>L[i]>>Y[i];
compx.pb(L[i]);
compt.pb(Y[i]);
}
sort(all(compx));
sort(all(compt));
compx.resize(unique(all(compx))-compx.begin());
compt.resize(unique(all(compt))-compt.begin());
// debugv(compx)
for (int i=1; i<=n; i++){
A[i]=lower_bound(all(compt), A[i])-compt.begin();
B[i]=lower_bound(all(compt), B[i])-compt.begin();
// debug2(A[i], B[i])
Q1[A[i]].pb(i);
Q2[B[i]].pb(i);
}
for (int i=1; i<=m; i++){
Y[i]=lower_bound(all(compt), Y[i])-compt.begin();
Q[Y[i]].pb(i);
}
for (timer=0; timer<MAXN; timer++){
for (int i:Q1[timer]) add(st[T[i]], T[i], X[i]);
for (int i:Q2[timer]) rem(st[T[i]], T[i], X[i]);
}
while (mp.size()) f(mp.begin()->first);
dfs(1, 0, MAXN);
for (int i=1; i<=m; i++) cout<<ans[i]<<'\n';
return 0;
}
/*
4 2 4
3 1 1 10
9 2 2 4
7 2 5 7
4 1 8 10
5 3
5 6
5 9
1 10
2 1 3
1 1 1 4
1 1 2 6
1 3
1 5
1 7
1 1 1
100000000 1 1 1
1 1
*/
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
49 ms |
68480 KB |
Output is correct |
2 |
Correct |
51 ms |
68516 KB |
Output is correct |
3 |
Correct |
51 ms |
68472 KB |
Output is correct |
4 |
Correct |
54 ms |
68472 KB |
Output is correct |
5 |
Correct |
69 ms |
68580 KB |
Output is correct |
6 |
Correct |
73 ms |
68736 KB |
Output is correct |
7 |
Correct |
53 ms |
69248 KB |
Output is correct |
8 |
Correct |
55 ms |
68984 KB |
Output is correct |
9 |
Correct |
53 ms |
69248 KB |
Output is correct |
10 |
Correct |
55 ms |
68856 KB |
Output is correct |
11 |
Correct |
57 ms |
68704 KB |
Output is correct |
12 |
Correct |
59 ms |
68636 KB |
Output is correct |
13 |
Correct |
63 ms |
68600 KB |
Output is correct |
14 |
Correct |
51 ms |
68600 KB |
Output is correct |
15 |
Correct |
55 ms |
68984 KB |
Output is correct |
16 |
Correct |
55 ms |
68984 KB |
Output is correct |
17 |
Correct |
98 ms |
68860 KB |
Output is correct |
18 |
Correct |
54 ms |
68984 KB |
Output is correct |
19 |
Correct |
55 ms |
68984 KB |
Output is correct |
20 |
Correct |
67 ms |
68856 KB |
Output is correct |
21 |
Correct |
49 ms |
68984 KB |
Output is correct |
22 |
Correct |
52 ms |
69240 KB |
Output is correct |
23 |
Correct |
52 ms |
69112 KB |
Output is correct |
24 |
Correct |
50 ms |
68984 KB |
Output is correct |
25 |
Correct |
49 ms |
68864 KB |
Output is correct |
26 |
Correct |
49 ms |
68600 KB |
Output is correct |
27 |
Correct |
55 ms |
68728 KB |
Output is correct |
28 |
Correct |
53 ms |
68736 KB |
Output is correct |
29 |
Correct |
61 ms |
68600 KB |
Output is correct |
30 |
Correct |
58 ms |
68600 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
49 ms |
68480 KB |
Output is correct |
2 |
Correct |
51 ms |
68516 KB |
Output is correct |
3 |
Correct |
51 ms |
68472 KB |
Output is correct |
4 |
Correct |
54 ms |
68472 KB |
Output is correct |
5 |
Correct |
69 ms |
68580 KB |
Output is correct |
6 |
Correct |
73 ms |
68736 KB |
Output is correct |
7 |
Correct |
53 ms |
69248 KB |
Output is correct |
8 |
Correct |
55 ms |
68984 KB |
Output is correct |
9 |
Correct |
53 ms |
69248 KB |
Output is correct |
10 |
Correct |
55 ms |
68856 KB |
Output is correct |
11 |
Correct |
57 ms |
68704 KB |
Output is correct |
12 |
Correct |
59 ms |
68636 KB |
Output is correct |
13 |
Correct |
63 ms |
68600 KB |
Output is correct |
14 |
Correct |
51 ms |
68600 KB |
Output is correct |
15 |
Correct |
55 ms |
68984 KB |
Output is correct |
16 |
Correct |
55 ms |
68984 KB |
Output is correct |
17 |
Correct |
98 ms |
68860 KB |
Output is correct |
18 |
Correct |
54 ms |
68984 KB |
Output is correct |
19 |
Correct |
55 ms |
68984 KB |
Output is correct |
20 |
Correct |
67 ms |
68856 KB |
Output is correct |
21 |
Correct |
49 ms |
68984 KB |
Output is correct |
22 |
Correct |
52 ms |
69240 KB |
Output is correct |
23 |
Correct |
52 ms |
69112 KB |
Output is correct |
24 |
Correct |
50 ms |
68984 KB |
Output is correct |
25 |
Correct |
49 ms |
68864 KB |
Output is correct |
26 |
Correct |
49 ms |
68600 KB |
Output is correct |
27 |
Correct |
55 ms |
68728 KB |
Output is correct |
28 |
Correct |
53 ms |
68736 KB |
Output is correct |
29 |
Correct |
61 ms |
68600 KB |
Output is correct |
30 |
Correct |
58 ms |
68600 KB |
Output is correct |
31 |
Correct |
2850 ms |
176096 KB |
Output is correct |
32 |
Correct |
125 ms |
72820 KB |
Output is correct |
33 |
Correct |
2217 ms |
161760 KB |
Output is correct |
34 |
Correct |
2545 ms |
163604 KB |
Output is correct |
35 |
Correct |
2794 ms |
175628 KB |
Output is correct |
36 |
Correct |
2402 ms |
174180 KB |
Output is correct |
37 |
Correct |
1661 ms |
143880 KB |
Output is correct |
38 |
Correct |
1480 ms |
143528 KB |
Output is correct |
39 |
Correct |
964 ms |
119060 KB |
Output is correct |
40 |
Correct |
1040 ms |
125172 KB |
Output is correct |
41 |
Correct |
1482 ms |
134820 KB |
Output is correct |
42 |
Correct |
1502 ms |
136380 KB |
Output is correct |
43 |
Correct |
112 ms |
74912 KB |
Output is correct |
44 |
Correct |
1412 ms |
133364 KB |
Output is correct |
45 |
Correct |
1129 ms |
118516 KB |
Output is correct |
46 |
Correct |
717 ms |
95348 KB |
Output is correct |
47 |
Correct |
564 ms |
96008 KB |
Output is correct |
48 |
Correct |
498 ms |
90484 KB |
Output is correct |
49 |
Correct |
729 ms |
105096 KB |
Output is correct |
50 |
Correct |
1103 ms |
131088 KB |
Output is correct |
51 |
Correct |
655 ms |
98036 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
5077 ms |
413044 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
5087 ms |
364852 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
49 ms |
68480 KB |
Output is correct |
2 |
Correct |
51 ms |
68516 KB |
Output is correct |
3 |
Correct |
51 ms |
68472 KB |
Output is correct |
4 |
Correct |
54 ms |
68472 KB |
Output is correct |
5 |
Correct |
69 ms |
68580 KB |
Output is correct |
6 |
Correct |
73 ms |
68736 KB |
Output is correct |
7 |
Correct |
53 ms |
69248 KB |
Output is correct |
8 |
Correct |
55 ms |
68984 KB |
Output is correct |
9 |
Correct |
53 ms |
69248 KB |
Output is correct |
10 |
Correct |
55 ms |
68856 KB |
Output is correct |
11 |
Correct |
57 ms |
68704 KB |
Output is correct |
12 |
Correct |
59 ms |
68636 KB |
Output is correct |
13 |
Correct |
63 ms |
68600 KB |
Output is correct |
14 |
Correct |
51 ms |
68600 KB |
Output is correct |
15 |
Correct |
55 ms |
68984 KB |
Output is correct |
16 |
Correct |
55 ms |
68984 KB |
Output is correct |
17 |
Correct |
98 ms |
68860 KB |
Output is correct |
18 |
Correct |
54 ms |
68984 KB |
Output is correct |
19 |
Correct |
55 ms |
68984 KB |
Output is correct |
20 |
Correct |
67 ms |
68856 KB |
Output is correct |
21 |
Correct |
49 ms |
68984 KB |
Output is correct |
22 |
Correct |
52 ms |
69240 KB |
Output is correct |
23 |
Correct |
52 ms |
69112 KB |
Output is correct |
24 |
Correct |
50 ms |
68984 KB |
Output is correct |
25 |
Correct |
49 ms |
68864 KB |
Output is correct |
26 |
Correct |
49 ms |
68600 KB |
Output is correct |
27 |
Correct |
55 ms |
68728 KB |
Output is correct |
28 |
Correct |
53 ms |
68736 KB |
Output is correct |
29 |
Correct |
61 ms |
68600 KB |
Output is correct |
30 |
Correct |
58 ms |
68600 KB |
Output is correct |
31 |
Correct |
2850 ms |
176096 KB |
Output is correct |
32 |
Correct |
125 ms |
72820 KB |
Output is correct |
33 |
Correct |
2217 ms |
161760 KB |
Output is correct |
34 |
Correct |
2545 ms |
163604 KB |
Output is correct |
35 |
Correct |
2794 ms |
175628 KB |
Output is correct |
36 |
Correct |
2402 ms |
174180 KB |
Output is correct |
37 |
Correct |
1661 ms |
143880 KB |
Output is correct |
38 |
Correct |
1480 ms |
143528 KB |
Output is correct |
39 |
Correct |
964 ms |
119060 KB |
Output is correct |
40 |
Correct |
1040 ms |
125172 KB |
Output is correct |
41 |
Correct |
1482 ms |
134820 KB |
Output is correct |
42 |
Correct |
1502 ms |
136380 KB |
Output is correct |
43 |
Correct |
112 ms |
74912 KB |
Output is correct |
44 |
Correct |
1412 ms |
133364 KB |
Output is correct |
45 |
Correct |
1129 ms |
118516 KB |
Output is correct |
46 |
Correct |
717 ms |
95348 KB |
Output is correct |
47 |
Correct |
564 ms |
96008 KB |
Output is correct |
48 |
Correct |
498 ms |
90484 KB |
Output is correct |
49 |
Correct |
729 ms |
105096 KB |
Output is correct |
50 |
Correct |
1103 ms |
131088 KB |
Output is correct |
51 |
Correct |
655 ms |
98036 KB |
Output is correct |
52 |
Correct |
1998 ms |
211936 KB |
Output is correct |
53 |
Correct |
2064 ms |
196872 KB |
Output is correct |
54 |
Correct |
2544 ms |
191732 KB |
Output is correct |
55 |
Correct |
1744 ms |
163300 KB |
Output is correct |
56 |
Correct |
1806 ms |
174516 KB |
Output is correct |
57 |
Correct |
1615 ms |
143828 KB |
Output is correct |
58 |
Correct |
1872 ms |
163900 KB |
Output is correct |
59 |
Correct |
1952 ms |
175824 KB |
Output is correct |
60 |
Correct |
1714 ms |
145228 KB |
Output is correct |
61 |
Correct |
701 ms |
139908 KB |
Output is correct |
62 |
Correct |
2064 ms |
206576 KB |
Output is correct |
63 |
Correct |
2387 ms |
195640 KB |
Output is correct |
64 |
Correct |
2338 ms |
186644 KB |
Output is correct |
65 |
Correct |
2262 ms |
168564 KB |
Output is correct |
66 |
Correct |
1711 ms |
143348 KB |
Output is correct |
67 |
Correct |
716 ms |
92140 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
49 ms |
68480 KB |
Output is correct |
2 |
Correct |
51 ms |
68516 KB |
Output is correct |
3 |
Correct |
51 ms |
68472 KB |
Output is correct |
4 |
Correct |
54 ms |
68472 KB |
Output is correct |
5 |
Correct |
69 ms |
68580 KB |
Output is correct |
6 |
Correct |
73 ms |
68736 KB |
Output is correct |
7 |
Correct |
53 ms |
69248 KB |
Output is correct |
8 |
Correct |
55 ms |
68984 KB |
Output is correct |
9 |
Correct |
53 ms |
69248 KB |
Output is correct |
10 |
Correct |
55 ms |
68856 KB |
Output is correct |
11 |
Correct |
57 ms |
68704 KB |
Output is correct |
12 |
Correct |
59 ms |
68636 KB |
Output is correct |
13 |
Correct |
63 ms |
68600 KB |
Output is correct |
14 |
Correct |
51 ms |
68600 KB |
Output is correct |
15 |
Correct |
55 ms |
68984 KB |
Output is correct |
16 |
Correct |
55 ms |
68984 KB |
Output is correct |
17 |
Correct |
98 ms |
68860 KB |
Output is correct |
18 |
Correct |
54 ms |
68984 KB |
Output is correct |
19 |
Correct |
55 ms |
68984 KB |
Output is correct |
20 |
Correct |
67 ms |
68856 KB |
Output is correct |
21 |
Correct |
49 ms |
68984 KB |
Output is correct |
22 |
Correct |
52 ms |
69240 KB |
Output is correct |
23 |
Correct |
52 ms |
69112 KB |
Output is correct |
24 |
Correct |
50 ms |
68984 KB |
Output is correct |
25 |
Correct |
49 ms |
68864 KB |
Output is correct |
26 |
Correct |
49 ms |
68600 KB |
Output is correct |
27 |
Correct |
55 ms |
68728 KB |
Output is correct |
28 |
Correct |
53 ms |
68736 KB |
Output is correct |
29 |
Correct |
61 ms |
68600 KB |
Output is correct |
30 |
Correct |
58 ms |
68600 KB |
Output is correct |
31 |
Correct |
2850 ms |
176096 KB |
Output is correct |
32 |
Correct |
125 ms |
72820 KB |
Output is correct |
33 |
Correct |
2217 ms |
161760 KB |
Output is correct |
34 |
Correct |
2545 ms |
163604 KB |
Output is correct |
35 |
Correct |
2794 ms |
175628 KB |
Output is correct |
36 |
Correct |
2402 ms |
174180 KB |
Output is correct |
37 |
Correct |
1661 ms |
143880 KB |
Output is correct |
38 |
Correct |
1480 ms |
143528 KB |
Output is correct |
39 |
Correct |
964 ms |
119060 KB |
Output is correct |
40 |
Correct |
1040 ms |
125172 KB |
Output is correct |
41 |
Correct |
1482 ms |
134820 KB |
Output is correct |
42 |
Correct |
1502 ms |
136380 KB |
Output is correct |
43 |
Correct |
112 ms |
74912 KB |
Output is correct |
44 |
Correct |
1412 ms |
133364 KB |
Output is correct |
45 |
Correct |
1129 ms |
118516 KB |
Output is correct |
46 |
Correct |
717 ms |
95348 KB |
Output is correct |
47 |
Correct |
564 ms |
96008 KB |
Output is correct |
48 |
Correct |
498 ms |
90484 KB |
Output is correct |
49 |
Correct |
729 ms |
105096 KB |
Output is correct |
50 |
Correct |
1103 ms |
131088 KB |
Output is correct |
51 |
Correct |
655 ms |
98036 KB |
Output is correct |
52 |
Execution timed out |
5077 ms |
413044 KB |
Time limit exceeded |
53 |
Halted |
0 ms |
0 KB |
- |