#include <bits/stdc++.h>
#define pb push_back
#define f first
#define sc second
using namespace std;
typedef long long int ll;
typedef string str;
const ll inf = 1e17;
int k;
struct node{
bool dummy;
vector<vector<ll>> A, B;
node(){
dummy = 1;
A.assign(k, vector<ll>(k, 0));
B = vector<vector<ll>>(k, vector<ll>(k, inf));
for(int i = 0; i < k; i++) B[i][i] = 0;
}
node(vector<vector<ll>> _A){
dummy = 0;
A = _A;
B.assign(k, vector<ll>(k, inf));
for(int i = 0; i < k; i++) B[i][i] = 0;
}
};
node operator+(node a, node b){
if(a.dummy) return b;
if(b.dummy) return a;
node rt;
rt.dummy = 0;
rt.A = a.A, rt.B = vector<vector<ll>>(k, vector<ll>(k, inf));
for(int i = 0; i < k; i++) for(int j = 0; j < k; j++)
for(int l = 0; l < k; l++) for(int m = 0; m < k; m++)
rt.B[i][j] = min(rt.B[i][j], a.B[i][l]+b.B[m][j]+b.A[l][m]);
return rt;
}
struct segtree{
int k;
vector<node> v;
segtree(int n){
k = 1;
while(k < n) k*=2;
k*=2;
v.resize(k, node());
}
void upd(int in, vector<vector<ll>> x){
in+=k/2;
v[in] = node(x);
in/=2;
while(in > 0){
v[in] = v[2*in]+v[2*in+1];
in/=2;
}
}
node get(int l, int r, int nd, int a, int b){
if(b < l || a > r) return node();
if(a >= l && b <= r) return v[nd];
int md = (a+b)/2;
return get(l, r, 2*nd, a, md) + get(l, r, 2*nd+1, md+1, b);
}
node get(int l, int r){
return get(l, r, 1, 0, k/2-1);
}
};
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, m, o; cin >> k >> n >> m >> o;
vector<vector<vector<ll>>> div((n+k-1)/k, vector<vector<ll>>(k, vector<ll>(k, inf)));
segtree seg((n+k-1)/k);
for(int i = 0; i < m; i++){
int a, b; ll w; cin >> a >> b >> w;
div[b/k][a%k][b%k] = w;
}
for(int i = 0; i < div.size(); i++) seg.upd(i, div[i]);
while(o--){
int a, b; cin >> a >> b;
auto nd = seg.get(a/k, b/k);
ll ans = nd.B[a%k][b%k];
if(ans >= inf) ans = -1;
cout << ans << "\n";
}
}
Compilation message
toll.cpp: In function 'int main()':
toll.cpp:84:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<std::vector<long long int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
84 | for(int i = 0; i < div.size(); i++) seg.upd(i, div[i]);
| ~~^~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
437 ms |
28288 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
324 KB |
Output is correct |
5 |
Correct |
12 ms |
724 KB |
Output is correct |
6 |
Correct |
10 ms |
712 KB |
Output is correct |
7 |
Correct |
10 ms |
796 KB |
Output is correct |
8 |
Correct |
492 ms |
29224 KB |
Output is correct |
9 |
Correct |
425 ms |
29092 KB |
Output is correct |
10 |
Correct |
459 ms |
28336 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
330 ms |
24040 KB |
Output is correct |
2 |
Correct |
1 ms |
324 KB |
Output is correct |
3 |
Correct |
1 ms |
320 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
212 KB |
Output is correct |
7 |
Correct |
36 ms |
852 KB |
Output is correct |
8 |
Correct |
40 ms |
816 KB |
Output is correct |
9 |
Correct |
389 ms |
29128 KB |
Output is correct |
10 |
Correct |
366 ms |
32200 KB |
Output is correct |
11 |
Correct |
355 ms |
25852 KB |
Output is correct |
12 |
Correct |
340 ms |
31044 KB |
Output is correct |
13 |
Correct |
238 ms |
17720 KB |
Output is correct |
14 |
Correct |
182 ms |
16744 KB |
Output is correct |
15 |
Correct |
199 ms |
16456 KB |
Output is correct |
16 |
Correct |
197 ms |
16592 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
5 ms |
776 KB |
Output is correct |
7 |
Correct |
5 ms |
704 KB |
Output is correct |
8 |
Correct |
6 ms |
724 KB |
Output is correct |
9 |
Correct |
5 ms |
724 KB |
Output is correct |
10 |
Correct |
343 ms |
28220 KB |
Output is correct |
11 |
Correct |
324 ms |
24048 KB |
Output is correct |
12 |
Correct |
267 ms |
29748 KB |
Output is correct |
13 |
Correct |
288 ms |
29752 KB |
Output is correct |
14 |
Correct |
254 ms |
29664 KB |
Output is correct |
15 |
Correct |
170 ms |
15316 KB |
Output is correct |
16 |
Correct |
162 ms |
15308 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
5 ms |
776 KB |
Output is correct |
7 |
Correct |
5 ms |
704 KB |
Output is correct |
8 |
Correct |
6 ms |
724 KB |
Output is correct |
9 |
Correct |
5 ms |
724 KB |
Output is correct |
10 |
Correct |
343 ms |
28220 KB |
Output is correct |
11 |
Correct |
324 ms |
24048 KB |
Output is correct |
12 |
Correct |
267 ms |
29748 KB |
Output is correct |
13 |
Correct |
288 ms |
29752 KB |
Output is correct |
14 |
Correct |
254 ms |
29664 KB |
Output is correct |
15 |
Correct |
170 ms |
15316 KB |
Output is correct |
16 |
Correct |
162 ms |
15308 KB |
Output is correct |
17 |
Correct |
294 ms |
24048 KB |
Output is correct |
18 |
Correct |
1 ms |
212 KB |
Output is correct |
19 |
Correct |
0 ms |
212 KB |
Output is correct |
20 |
Correct |
1 ms |
212 KB |
Output is correct |
21 |
Correct |
1 ms |
212 KB |
Output is correct |
22 |
Correct |
1 ms |
324 KB |
Output is correct |
23 |
Correct |
21 ms |
820 KB |
Output is correct |
24 |
Correct |
21 ms |
760 KB |
Output is correct |
25 |
Correct |
42 ms |
880 KB |
Output is correct |
26 |
Correct |
35 ms |
808 KB |
Output is correct |
27 |
Correct |
368 ms |
28992 KB |
Output is correct |
28 |
Correct |
305 ms |
31956 KB |
Output is correct |
29 |
Correct |
311 ms |
32192 KB |
Output is correct |
30 |
Correct |
303 ms |
31648 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
437 ms |
28288 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
324 KB |
Output is correct |
5 |
Correct |
12 ms |
724 KB |
Output is correct |
6 |
Correct |
10 ms |
712 KB |
Output is correct |
7 |
Correct |
10 ms |
796 KB |
Output is correct |
8 |
Correct |
492 ms |
29224 KB |
Output is correct |
9 |
Correct |
425 ms |
29092 KB |
Output is correct |
10 |
Correct |
459 ms |
28336 KB |
Output is correct |
11 |
Correct |
330 ms |
24040 KB |
Output is correct |
12 |
Correct |
1 ms |
324 KB |
Output is correct |
13 |
Correct |
1 ms |
320 KB |
Output is correct |
14 |
Correct |
0 ms |
212 KB |
Output is correct |
15 |
Correct |
1 ms |
212 KB |
Output is correct |
16 |
Correct |
1 ms |
212 KB |
Output is correct |
17 |
Correct |
36 ms |
852 KB |
Output is correct |
18 |
Correct |
40 ms |
816 KB |
Output is correct |
19 |
Correct |
389 ms |
29128 KB |
Output is correct |
20 |
Correct |
366 ms |
32200 KB |
Output is correct |
21 |
Correct |
355 ms |
25852 KB |
Output is correct |
22 |
Correct |
340 ms |
31044 KB |
Output is correct |
23 |
Correct |
238 ms |
17720 KB |
Output is correct |
24 |
Correct |
182 ms |
16744 KB |
Output is correct |
25 |
Correct |
199 ms |
16456 KB |
Output is correct |
26 |
Correct |
197 ms |
16592 KB |
Output is correct |
27 |
Correct |
1 ms |
212 KB |
Output is correct |
28 |
Correct |
0 ms |
212 KB |
Output is correct |
29 |
Correct |
0 ms |
212 KB |
Output is correct |
30 |
Correct |
0 ms |
212 KB |
Output is correct |
31 |
Correct |
0 ms |
212 KB |
Output is correct |
32 |
Correct |
5 ms |
776 KB |
Output is correct |
33 |
Correct |
5 ms |
704 KB |
Output is correct |
34 |
Correct |
6 ms |
724 KB |
Output is correct |
35 |
Correct |
5 ms |
724 KB |
Output is correct |
36 |
Correct |
343 ms |
28220 KB |
Output is correct |
37 |
Correct |
324 ms |
24048 KB |
Output is correct |
38 |
Correct |
267 ms |
29748 KB |
Output is correct |
39 |
Correct |
288 ms |
29752 KB |
Output is correct |
40 |
Correct |
254 ms |
29664 KB |
Output is correct |
41 |
Correct |
170 ms |
15316 KB |
Output is correct |
42 |
Correct |
162 ms |
15308 KB |
Output is correct |
43 |
Correct |
294 ms |
24048 KB |
Output is correct |
44 |
Correct |
1 ms |
212 KB |
Output is correct |
45 |
Correct |
0 ms |
212 KB |
Output is correct |
46 |
Correct |
1 ms |
212 KB |
Output is correct |
47 |
Correct |
1 ms |
212 KB |
Output is correct |
48 |
Correct |
1 ms |
324 KB |
Output is correct |
49 |
Correct |
21 ms |
820 KB |
Output is correct |
50 |
Correct |
21 ms |
760 KB |
Output is correct |
51 |
Correct |
42 ms |
880 KB |
Output is correct |
52 |
Correct |
35 ms |
808 KB |
Output is correct |
53 |
Correct |
368 ms |
28992 KB |
Output is correct |
54 |
Correct |
305 ms |
31956 KB |
Output is correct |
55 |
Correct |
311 ms |
32192 KB |
Output is correct |
56 |
Correct |
303 ms |
31648 KB |
Output is correct |
57 |
Correct |
500 ms |
29184 KB |
Output is correct |
58 |
Correct |
432 ms |
29260 KB |
Output is correct |
59 |
Correct |
399 ms |
25968 KB |
Output is correct |