#include <bits/stdc++.h>
using namespace std;
#define lli long long int
#define MP make_pair
#define pb push_back
#define REP(i,n) for(int (i) = 0; (i) < (n); (i)++)
void fastio() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
}
const double EPS = 0.00001;
const int INF = 1e9+500;
const int N = 3e5+5;
const int ALPH = 26;
const int LGN = 21;
const int MOD = 1e9+7;
int n,m,q,K;
struct Interval {
int l,r;
Interval(int lf, int rg) {
l = lf;
r = rg;
}
Interval() {
l = 0; r = 0;
}
bool check(int x) {
return l<=x && x<=r;
}
void print() {
cout<<"l:"<<l<<" r: "<<r<<"\n";
}
};
struct RUPQ {
vector<int> data;
int sz;
RUPQ(int sz) {
this->sz = sz;
data.assign(4*(sz + 5), -INF);
}
void update(int tl, int tr, int v, int l, int r, int val) {
if(tl >= l && tr <= r) {
data[v] = val;
return;
}
if(tl > r || tr < l) {
return;
}
int tm = (tl + tr) >> 1;
update(tl, tm, v*2, l, r, val);
update(tm + 1, tr, v*2+1, l, r, val);
}
void update(int l, int r, int val) {
update(0, sz, 1, l, r, val);
}
int query(int tl, int tr, int v, int ind) {
if(tl == tr) {
return data[v];
}
int tm = (tl + tr) >> 1;
if(ind <= tm) {
return max(data[v], query(tl, tm, v*2, ind));
}
else {
return max(data[v], query(tm + 1, tr, v*2+1, ind));
}
}
int query(int ind) {
return query(0, sz, 1, ind);
}
};
struct PURQ {
int sz;
vector<int> data;
PURQ(int sz) {
this->sz = sz;
data.assign(4* (sz + 5), -INF);
}
void update(int tl, int tr, int v, int ind, int val) {
if(tl == tr) {
data[v] = max(data[v], val);
return;
}
int tm = (tl + tr) >> 1;
if(ind <= tm) {
update(tl, tm, v*2, ind, val);
}
else {
update(tm + 1, tr, v*2+1, ind, val);
}
data[v] = max(data[v*2], data[v*2+1]);
}
void update(int ind ,int val) {
update(0, sz, 1, ind, val);
}
int query(int tl, int tr, int v, int l, int r) {
if(tl >= l && tr <= r) {
return data[v];
}
if(tl > r || tr < l) {
return -INF;
}
int tm = (tl + tr) >> 1;
return max(query(tl, tm, v*2, l, r), query(tm + 1, tr, v*2+1, l, r));
}
int query(int l, int r) {
return query(0, sz, 1, l, r);
}
};
vector<array<int,2> > trainl, trainr; //trainl -l, r // trainr r l
PURQ *lft[LGN], *rgt[LGN]; //left - || right +
void prec() {
RUPQ dsr(n), dsl(n);
sort(trainr.begin(), trainr.end());
sort(trainl.begin(), trainl.end());
for(auto c : trainr) {
dsr.update(c[1] , min(c[1] + K - 1, c[0]), c[0]);
}
for(auto c : trainl) {
dsl.update(max(c[1] - K + 1, -c[0]), c[1], c[0]);
}
for(int i = 1; i<=n; i++) {
// Interval tmp(max(dsl.query(i), -i), max(dsr.query(i), i));
// tmp.l *= -1;
// cout<<"i:"<<i<<" ";
// tmp.print();
rgt[0]->update(i, max(dsr.query(i), i));
lft[0]->update(i, max(dsl.query(i), -i));
}
for(int k = 1; k<LGN; k++) {
// cout<<"k:"<<k<<"\n";
for(int i = 1; i<=n; i++) {
Interval cur(-lft[k - 1]->query(i,i), rgt[k - 1]->query(i,i));
// cur.print();
rgt[k]->update(i, rgt[k - 1]->query(cur.l, cur.r));
lft[k]->update(i, lft[k - 1]->query(cur.l, cur.r));
}
}
}
Interval move_interval(Interval &x, int k) { //move interval by 2^k steps
Interval tmp(-lft[k]->query(x.l, x.r), rgt[k]->query(x.l, x.r));
return tmp;
}
int ans_query(int s, int t) {
Interval cur(s,s);
int ans = 0;
for(int i = LGN - 1; i>=0; i--) {
Interval nxt = move_interval(cur, i);
if(!nxt.check(t)) {
cur = nxt;
ans += (1<<i);
}
}
ans++;
cur = move_interval(cur, 0);
if(cur.check(t)) {
return ans;
}
return -1;
}
inline void solve() {
cin>>n>>K;
cin>>m;
for(int i = 0; i<m; i++) {
int l,r;
cin >> l >> r;
if(r > l) {
trainr.pb({r,l});
}
else {
trainl.pb({-r,l});
}
}
cin>>q;
for(int i = 0; i<LGN; i++) {
lft[i] = new PURQ(n);
rgt[i] = new PURQ(n);
}
prec();
for(int i = 1; i<=q; i++) {
int s,t;
cin>>s>>t;
cout<<ans_query(s,t)<<"\n";
}
}
signed main() {
fastio();
int test = 1;
//cin>>test;
while(test--) {
solve();
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
600 KB |
Output is correct |
2 |
Correct |
4 ms |
600 KB |
Output is correct |
3 |
Correct |
2 ms |
604 KB |
Output is correct |
4 |
Correct |
2 ms |
688 KB |
Output is correct |
5 |
Correct |
3 ms |
604 KB |
Output is correct |
6 |
Correct |
2 ms |
604 KB |
Output is correct |
7 |
Correct |
3 ms |
604 KB |
Output is correct |
8 |
Correct |
2 ms |
604 KB |
Output is correct |
9 |
Correct |
3 ms |
684 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Correct |
3 ms |
604 KB |
Output is correct |
12 |
Correct |
2 ms |
604 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
600 KB |
Output is correct |
2 |
Correct |
4 ms |
600 KB |
Output is correct |
3 |
Correct |
2 ms |
604 KB |
Output is correct |
4 |
Correct |
2 ms |
688 KB |
Output is correct |
5 |
Correct |
3 ms |
604 KB |
Output is correct |
6 |
Correct |
2 ms |
604 KB |
Output is correct |
7 |
Correct |
3 ms |
604 KB |
Output is correct |
8 |
Correct |
2 ms |
604 KB |
Output is correct |
9 |
Correct |
3 ms |
684 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Correct |
3 ms |
604 KB |
Output is correct |
12 |
Correct |
2 ms |
604 KB |
Output is correct |
13 |
Correct |
26 ms |
1884 KB |
Output is correct |
14 |
Correct |
23 ms |
1884 KB |
Output is correct |
15 |
Correct |
17 ms |
1880 KB |
Output is correct |
16 |
Correct |
17 ms |
1884 KB |
Output is correct |
17 |
Correct |
23 ms |
2136 KB |
Output is correct |
18 |
Correct |
18 ms |
1856 KB |
Output is correct |
19 |
Correct |
18 ms |
1628 KB |
Output is correct |
20 |
Correct |
18 ms |
1884 KB |
Output is correct |
21 |
Correct |
14 ms |
1628 KB |
Output is correct |
22 |
Correct |
18 ms |
1880 KB |
Output is correct |
23 |
Correct |
21 ms |
1880 KB |
Output is correct |
24 |
Correct |
21 ms |
1884 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1208 ms |
71196 KB |
Output is correct |
2 |
Correct |
1133 ms |
71152 KB |
Output is correct |
3 |
Correct |
1197 ms |
71472 KB |
Output is correct |
4 |
Correct |
1143 ms |
71044 KB |
Output is correct |
5 |
Correct |
828 ms |
73488 KB |
Output is correct |
6 |
Correct |
1165 ms |
73408 KB |
Output is correct |
7 |
Correct |
936 ms |
73132 KB |
Output is correct |
8 |
Correct |
905 ms |
70840 KB |
Output is correct |
9 |
Correct |
915 ms |
71536 KB |
Output is correct |
10 |
Correct |
1024 ms |
73400 KB |
Output is correct |
11 |
Correct |
1044 ms |
73512 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1510 ms |
71388 KB |
Output is correct |
2 |
Correct |
1303 ms |
73636 KB |
Output is correct |
3 |
Correct |
1564 ms |
71784 KB |
Output is correct |
4 |
Correct |
1169 ms |
73256 KB |
Output is correct |
5 |
Correct |
1151 ms |
73008 KB |
Output is correct |
6 |
Correct |
1147 ms |
73936 KB |
Output is correct |
7 |
Correct |
1370 ms |
73636 KB |
Output is correct |
8 |
Correct |
1456 ms |
73724 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1354 ms |
75432 KB |
Output is correct |
2 |
Correct |
1758 ms |
71704 KB |
Output is correct |
3 |
Correct |
1812 ms |
70864 KB |
Output is correct |
4 |
Correct |
1634 ms |
70056 KB |
Output is correct |
5 |
Correct |
1416 ms |
69816 KB |
Output is correct |
6 |
Correct |
1429 ms |
69460 KB |
Output is correct |
7 |
Correct |
1222 ms |
73500 KB |
Output is correct |
8 |
Correct |
2 ms |
604 KB |
Output is correct |
9 |
Correct |
19 ms |
1908 KB |
Output is correct |
10 |
Correct |
1064 ms |
73400 KB |
Output is correct |
11 |
Correct |
1188 ms |
73656 KB |
Output is correct |
12 |
Correct |
1269 ms |
72936 KB |
Output is correct |
13 |
Correct |
1252 ms |
73632 KB |
Output is correct |
14 |
Correct |
3 ms |
600 KB |
Output is correct |
15 |
Correct |
23 ms |
1884 KB |
Output is correct |
16 |
Correct |
1179 ms |
73396 KB |
Output is correct |
17 |
Correct |
1614 ms |
73636 KB |
Output is correct |
18 |
Correct |
1573 ms |
75504 KB |
Output is correct |
19 |
Correct |
1440 ms |
73640 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
600 KB |
Output is correct |
2 |
Correct |
4 ms |
600 KB |
Output is correct |
3 |
Correct |
2 ms |
604 KB |
Output is correct |
4 |
Correct |
2 ms |
688 KB |
Output is correct |
5 |
Correct |
3 ms |
604 KB |
Output is correct |
6 |
Correct |
2 ms |
604 KB |
Output is correct |
7 |
Correct |
3 ms |
604 KB |
Output is correct |
8 |
Correct |
2 ms |
604 KB |
Output is correct |
9 |
Correct |
3 ms |
684 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Correct |
3 ms |
604 KB |
Output is correct |
12 |
Correct |
2 ms |
604 KB |
Output is correct |
13 |
Correct |
26 ms |
1884 KB |
Output is correct |
14 |
Correct |
23 ms |
1884 KB |
Output is correct |
15 |
Correct |
17 ms |
1880 KB |
Output is correct |
16 |
Correct |
17 ms |
1884 KB |
Output is correct |
17 |
Correct |
23 ms |
2136 KB |
Output is correct |
18 |
Correct |
18 ms |
1856 KB |
Output is correct |
19 |
Correct |
18 ms |
1628 KB |
Output is correct |
20 |
Correct |
18 ms |
1884 KB |
Output is correct |
21 |
Correct |
14 ms |
1628 KB |
Output is correct |
22 |
Correct |
18 ms |
1880 KB |
Output is correct |
23 |
Correct |
21 ms |
1880 KB |
Output is correct |
24 |
Correct |
21 ms |
1884 KB |
Output is correct |
25 |
Correct |
1208 ms |
71196 KB |
Output is correct |
26 |
Correct |
1133 ms |
71152 KB |
Output is correct |
27 |
Correct |
1197 ms |
71472 KB |
Output is correct |
28 |
Correct |
1143 ms |
71044 KB |
Output is correct |
29 |
Correct |
828 ms |
73488 KB |
Output is correct |
30 |
Correct |
1165 ms |
73408 KB |
Output is correct |
31 |
Correct |
936 ms |
73132 KB |
Output is correct |
32 |
Correct |
905 ms |
70840 KB |
Output is correct |
33 |
Correct |
915 ms |
71536 KB |
Output is correct |
34 |
Correct |
1024 ms |
73400 KB |
Output is correct |
35 |
Correct |
1044 ms |
73512 KB |
Output is correct |
36 |
Correct |
1510 ms |
71388 KB |
Output is correct |
37 |
Correct |
1303 ms |
73636 KB |
Output is correct |
38 |
Correct |
1564 ms |
71784 KB |
Output is correct |
39 |
Correct |
1169 ms |
73256 KB |
Output is correct |
40 |
Correct |
1151 ms |
73008 KB |
Output is correct |
41 |
Correct |
1147 ms |
73936 KB |
Output is correct |
42 |
Correct |
1370 ms |
73636 KB |
Output is correct |
43 |
Correct |
1456 ms |
73724 KB |
Output is correct |
44 |
Correct |
1354 ms |
75432 KB |
Output is correct |
45 |
Correct |
1758 ms |
71704 KB |
Output is correct |
46 |
Correct |
1812 ms |
70864 KB |
Output is correct |
47 |
Correct |
1634 ms |
70056 KB |
Output is correct |
48 |
Correct |
1416 ms |
69816 KB |
Output is correct |
49 |
Correct |
1429 ms |
69460 KB |
Output is correct |
50 |
Correct |
1222 ms |
73500 KB |
Output is correct |
51 |
Correct |
2 ms |
604 KB |
Output is correct |
52 |
Correct |
19 ms |
1908 KB |
Output is correct |
53 |
Correct |
1064 ms |
73400 KB |
Output is correct |
54 |
Correct |
1188 ms |
73656 KB |
Output is correct |
55 |
Correct |
1269 ms |
72936 KB |
Output is correct |
56 |
Correct |
1252 ms |
73632 KB |
Output is correct |
57 |
Correct |
3 ms |
600 KB |
Output is correct |
58 |
Correct |
23 ms |
1884 KB |
Output is correct |
59 |
Correct |
1179 ms |
73396 KB |
Output is correct |
60 |
Correct |
1614 ms |
73636 KB |
Output is correct |
61 |
Correct |
1573 ms |
75504 KB |
Output is correct |
62 |
Correct |
1440 ms |
73640 KB |
Output is correct |
63 |
Correct |
1615 ms |
71256 KB |
Output is correct |
64 |
Correct |
1670 ms |
71576 KB |
Output is correct |
65 |
Correct |
1677 ms |
71204 KB |
Output is correct |
66 |
Correct |
951 ms |
73740 KB |
Output is correct |
67 |
Correct |
1662 ms |
75676 KB |
Output is correct |
68 |
Correct |
1403 ms |
73040 KB |
Output is correct |
69 |
Correct |
1149 ms |
73632 KB |
Output is correct |
70 |
Correct |
1482 ms |
73640 KB |
Output is correct |
71 |
Correct |
1519 ms |
73768 KB |
Output is correct |