#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <vector>
#include <map>
using namespace std;
#define endl '\n'
#define ll long long
#define pi pair<ll, int>
#define pii pair<ll, pi>
#define f first
#define s second
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
typedef tree<pi, null_type,less<pi>, rb_tree_tag,
tree_order_statistics_node_update> oset;
struct omset{
oset s;
map<ll, int> mp;
void clr(){
s.clear();
mp.clear();
}
void add(ll x){
s.insert({x, mp[x]++});
}
int qry(ll x){
return s.order_of_key({x + 1, -1});
}
int qry(ll a, ll b){
return qry(b) - qry(a - 1);
}
};
const int mxn = 200001;
ll n, m, k, w, q;
ll a[mxn], b[mxn];
ll rt[mxn], vis[mxn], p[mxn], d[mxn], l[mxn], r[mxn];
vector<pii> qr[mxn];
vector<int> g[mxn];
omset tre;
ll ans[mxn];
ll dst(int x, int y){
return w + (k + a[y] - (a[x] + w) % k) % k;
}
int dfs(int c){
r[c] = l[c];
for(int i : g[c]){
if(~rt[i]) continue;
d[i] = d[c] + dst(c, i);
rt[i] = rt[c];
l[i] = r[c] + 1;
r[c] = dfs(i);
}
return r[c];
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m >> k >> w;
for(int i = 0; i < n; i++) cin >> a[i];
for(int i = 0; i < m; i++) cin >> b[i];
//init graph
for(int i = 0; i < n; i++){
rt[i] = -1;
p[i] = (n + upper_bound(a, a + n, (k + (a[i] - w) % k) % k) - a - 1) % n;
g[p[i]].push_back(i);
}
for(int i = 0; i < n; i++){
if(!~rt[i]){
int j;
for(j = i; !vis[p[j]]; j = p[j]) vis[j] = 1;
vis[j] = 1;
for(int l = i; l != p[j]; l = p[l]) vis[l] = 0;
rt[j] = j;
dfs(j);
}
}
//end init graph
cin >> q;
//init queries
for(int i = 0; i < q; i++){
ll x, y;
cin >> x >> y;
x--;
qr[rt[x]].push_back({d[x] + y, {i, x}});
}
for(int i = 0; i < m; i++){
int x = (n + upper_bound(a, a + n, b[i]) - a - 1) % n;
qr[rt[x]].push_back({d[x] + (k + b[i] - a[x]) % k, {-1, x}});
}
//end init queries
for(int i = 0; i < n; i++){
if(rt[i] != i) continue;
tre.clr();
sort(qr[i].begin(), qr[i].end());
//solve tree
ll len = d[p[i]] + dst(p[i], i);
for(pii &j : qr[i]){
if(!~j.s.f){
tre.add(l[j.s.s]);
}else{
ans[j.s.f] = tre.qry(l[j.s.s], r[j.s.s]);
j.f -= len;
}
}
tre.clr();
sort(qr[i].begin(), qr[i].end());
//solve cycle
ll dt = 0;
for(pii j : qr[i]){
if(!~j.s.f){
dt -= j.f / len;
tre.add(j.f % len);
}else if(vis[j.s.s]){
ans[j.s.f] += dt + tre.qry(len) * (j.f / len) + tre.qry(j.f % len);
}
}
}
for(int i = 0; i < q; i++) cout << ans[i] << endl;
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
13 ms |
9984 KB |
Output is correct |
2 |
Correct |
14 ms |
10240 KB |
Output is correct |
3 |
Correct |
16 ms |
10556 KB |
Output is correct |
4 |
Correct |
18 ms |
10560 KB |
Output is correct |
5 |
Correct |
20 ms |
10684 KB |
Output is correct |
6 |
Correct |
17 ms |
10684 KB |
Output is correct |
7 |
Correct |
17 ms |
10684 KB |
Output is correct |
8 |
Correct |
16 ms |
10572 KB |
Output is correct |
9 |
Correct |
18 ms |
10572 KB |
Output is correct |
10 |
Correct |
15 ms |
10572 KB |
Output is correct |
11 |
Correct |
17 ms |
10572 KB |
Output is correct |
12 |
Correct |
15 ms |
10684 KB |
Output is correct |
13 |
Correct |
17 ms |
10684 KB |
Output is correct |
14 |
Correct |
17 ms |
10496 KB |
Output is correct |
15 |
Correct |
16 ms |
10812 KB |
Output is correct |
16 |
Correct |
16 ms |
10812 KB |
Output is correct |
17 |
Correct |
18 ms |
10812 KB |
Output is correct |
18 |
Correct |
15 ms |
10688 KB |
Output is correct |
19 |
Correct |
17 ms |
10688 KB |
Output is correct |
20 |
Correct |
16 ms |
10688 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
201 ms |
20052 KB |
Output is correct |
2 |
Correct |
279 ms |
32216 KB |
Output is correct |
3 |
Correct |
238 ms |
39416 KB |
Output is correct |
4 |
Correct |
264 ms |
40460 KB |
Output is correct |
5 |
Correct |
230 ms |
47832 KB |
Output is correct |
6 |
Correct |
217 ms |
47832 KB |
Output is correct |
7 |
Correct |
213 ms |
34404 KB |
Output is correct |
8 |
Correct |
245 ms |
34376 KB |
Output is correct |
9 |
Correct |
277 ms |
49752 KB |
Output is correct |
10 |
Correct |
257 ms |
49496 KB |
Output is correct |
11 |
Correct |
346 ms |
48920 KB |
Output is correct |
12 |
Correct |
333 ms |
48728 KB |
Output is correct |
13 |
Correct |
335 ms |
48600 KB |
Output is correct |
14 |
Correct |
319 ms |
48472 KB |
Output is correct |
15 |
Correct |
268 ms |
46404 KB |
Output is correct |
16 |
Correct |
232 ms |
43748 KB |
Output is correct |
17 |
Correct |
224 ms |
43624 KB |
Output is correct |
18 |
Correct |
163 ms |
26716 KB |
Output is correct |
19 |
Correct |
157 ms |
26712 KB |
Output is correct |
20 |
Correct |
186 ms |
37720 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
13 ms |
9984 KB |
Output is correct |
2 |
Correct |
14 ms |
10240 KB |
Output is correct |
3 |
Correct |
16 ms |
10556 KB |
Output is correct |
4 |
Correct |
18 ms |
10560 KB |
Output is correct |
5 |
Correct |
20 ms |
10684 KB |
Output is correct |
6 |
Correct |
17 ms |
10684 KB |
Output is correct |
7 |
Correct |
17 ms |
10684 KB |
Output is correct |
8 |
Correct |
16 ms |
10572 KB |
Output is correct |
9 |
Correct |
18 ms |
10572 KB |
Output is correct |
10 |
Correct |
15 ms |
10572 KB |
Output is correct |
11 |
Correct |
17 ms |
10572 KB |
Output is correct |
12 |
Correct |
15 ms |
10684 KB |
Output is correct |
13 |
Correct |
17 ms |
10684 KB |
Output is correct |
14 |
Correct |
17 ms |
10496 KB |
Output is correct |
15 |
Correct |
16 ms |
10812 KB |
Output is correct |
16 |
Correct |
16 ms |
10812 KB |
Output is correct |
17 |
Correct |
18 ms |
10812 KB |
Output is correct |
18 |
Correct |
15 ms |
10688 KB |
Output is correct |
19 |
Correct |
17 ms |
10688 KB |
Output is correct |
20 |
Correct |
16 ms |
10688 KB |
Output is correct |
21 |
Correct |
201 ms |
20052 KB |
Output is correct |
22 |
Correct |
279 ms |
32216 KB |
Output is correct |
23 |
Correct |
238 ms |
39416 KB |
Output is correct |
24 |
Correct |
264 ms |
40460 KB |
Output is correct |
25 |
Correct |
230 ms |
47832 KB |
Output is correct |
26 |
Correct |
217 ms |
47832 KB |
Output is correct |
27 |
Correct |
213 ms |
34404 KB |
Output is correct |
28 |
Correct |
245 ms |
34376 KB |
Output is correct |
29 |
Correct |
277 ms |
49752 KB |
Output is correct |
30 |
Correct |
257 ms |
49496 KB |
Output is correct |
31 |
Correct |
346 ms |
48920 KB |
Output is correct |
32 |
Correct |
333 ms |
48728 KB |
Output is correct |
33 |
Correct |
335 ms |
48600 KB |
Output is correct |
34 |
Correct |
319 ms |
48472 KB |
Output is correct |
35 |
Correct |
268 ms |
46404 KB |
Output is correct |
36 |
Correct |
232 ms |
43748 KB |
Output is correct |
37 |
Correct |
224 ms |
43624 KB |
Output is correct |
38 |
Correct |
163 ms |
26716 KB |
Output is correct |
39 |
Correct |
157 ms |
26712 KB |
Output is correct |
40 |
Correct |
186 ms |
37720 KB |
Output is correct |
41 |
Correct |
591 ms |
69220 KB |
Output is correct |
42 |
Correct |
346 ms |
46840 KB |
Output is correct |
43 |
Correct |
211 ms |
37084 KB |
Output is correct |
44 |
Correct |
593 ms |
69896 KB |
Output is correct |
45 |
Correct |
517 ms |
77512 KB |
Output is correct |
46 |
Correct |
527 ms |
78104 KB |
Output is correct |
47 |
Correct |
518 ms |
79560 KB |
Output is correct |
48 |
Correct |
473 ms |
79560 KB |
Output is correct |
49 |
Correct |
464 ms |
79348 KB |
Output is correct |
50 |
Correct |
645 ms |
65280 KB |
Output is correct |
51 |
Correct |
508 ms |
64324 KB |
Output is correct |
52 |
Correct |
770 ms |
79176 KB |
Output is correct |
53 |
Correct |
833 ms |
80968 KB |
Output is correct |
54 |
Correct |
687 ms |
79384 KB |
Output is correct |
55 |
Correct |
613 ms |
78412 KB |
Output is correct |
56 |
Correct |
529 ms |
74568 KB |
Output is correct |
57 |
Correct |
552 ms |
74440 KB |
Output is correct |
58 |
Correct |
571 ms |
76868 KB |
Output is correct |
59 |
Correct |
455 ms |
76360 KB |
Output is correct |
60 |
Correct |
498 ms |
76152 KB |
Output is correct |
61 |
Correct |
447 ms |
76232 KB |
Output is correct |
62 |
Correct |
868 ms |
65772 KB |
Output is correct |
63 |
Correct |
409 ms |
56780 KB |
Output is correct |
64 |
Correct |
434 ms |
57036 KB |
Output is correct |
65 |
Correct |
439 ms |
57804 KB |
Output is correct |
66 |
Correct |
459 ms |
57804 KB |
Output is correct |
67 |
Correct |
489 ms |
58184 KB |
Output is correct |
68 |
Correct |
473 ms |
57288 KB |
Output is correct |
69 |
Correct |
536 ms |
70860 KB |
Output is correct |
70 |
Correct |
529 ms |
67400 KB |
Output is correct |
71 |
Correct |
525 ms |
68716 KB |
Output is correct |
72 |
Correct |
536 ms |
68776 KB |
Output is correct |