#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int>pii;
typedef long long ll;
struct node {
int s, e;
ll mn, mx, sum;
bool lset;
ll add_val, set_val;
node *l, *r;
node (int _s, int _e, int A[] = NULL): s(_s), e(_e), mn(0), mx(0), sum(0), lset(0), add_val(0), set_val(0), l(NULL), r(NULL) {
if (A == NULL) return;
if (s == e) mn = mx = sum = A[s];
else {
l = new node(s, (s+e)>>1, A), r = new node((s+e+2)>>1, e, A);
combine();
}
}
void create_children() {
if (s == e) return;
if (l != NULL) return;
int m = (s+e)>>1;
l = new node(s, m);
r = new node(m+1, e);
}
void self_set(ll v) {
lset = 1;
mn = mx = set_val = v;
sum = v * (e-s+1);
add_val = 0;
}
void self_add(ll v) {
if (lset) { self_set(v + set_val); return; }
mn += v, mx += v, add_val += v;
sum += v*(e-s+1);
}
void lazy_propagate() {
if (s == e) return;
if (lset) {
l->self_set(set_val), r->self_set(set_val);
lset = set_val = 0LL;
}
if (add_val != 0) {
l->self_add(add_val), r->self_add(add_val);
add_val = 0;
}
}
void combine() {
if (l == NULL) return;
sum = l->sum + r->sum;
mn = min(l->mn, r->mn);
mx = max(l->mx, r->mx);
}
void add(int x, int y, ll v) {
if(x>y) return;
if (s == x && e == y) { self_add(v); return; }
int m = (s+e)>>1;
create_children(); lazy_propagate();
if (x <= m) l->add(x, min(y, m), v);
if (y > m) r->add(max(x, m+1), y, v);
combine();
}
void set(int x, int y, ll v) {
if (s == x && e == y) { self_set(v); return; }
int m = (s+e)>>1;
create_children(); lazy_propagate();
if (x <= m) l->set(x, min(y, m), v);
if (y > m) r->set(max(x, m+1), y, v);
combine();
}
ll range_sum(int x, int y) {
if (s == x && e == y) return sum;
if (l == NULL || lset) return (sum / (e-s+1)) * (y-x+1);
int m = (s+e)>>1;
lazy_propagate();
if (y <= m) return l->range_sum(x, y);
if (x > m) return r->range_sum(x, y);
return l->range_sum(x, m) + r->range_sum(m+1, y);
}
ll range_min(int x, int y) {
if (s == x && e == y) return mn;
if (l == NULL || lset) return mn;
int m = (s+e)>>1;
lazy_propagate();
if (y <= m) return l->range_min(x, y);
if (x > m) return r->range_min(x, y);
return min(l->range_min(x, m), r->range_min(m+1, y));
}
ll range_max(int x, int y) {
if (s == x && e == y) return mx;
if (l == NULL || lset) return mx;
int m = (s+e)>>1;
lazy_propagate();
if (y <= m) return l->range_max(x, y);
if (x > m) return r->range_max(x, y);
return max(l->range_max(x, m), r->range_max(m+1, y));
}
~node() {
if (l != NULL) delete l;
if (r != NULL) delete r;
}
} *root;
long long count_swaps(vector<int> s) {
//cout << "check\n";
//int cnt[100005];
//memset(cnt,0,sizeof(cnt));
int n=s.size();
vector<int>r[10*n+5]; //cnt<0
vector<int>l[10*n+5];
//cout << "check\n";
root = new node(0,10*n+5);
for(int x=n-1;x>=0;x--){
if(s[x]>0){
//right
r[s[x]].push_back(x);
}
else{
//left
l[abs(s[x])].push_back(x);
}
}
long long counter=0;
for(int x=0;x<n;x++){
int target;
if(s[x]>0){
if(r[s[x]].empty()||r[s[x]].back()!=x) continue;
r[s[x]].pop_back();
if(l[s[x]].empty()) continue;
target=l[s[x]].back();
int target2=target;
target+=root->range_sum(target,target);
int cur=x+root->range_sum(x,x);
l[s[x]].pop_back();
int dist=abs(cur-target);
counter+=dist;
root->add(x+1,target2,1);
}
else{
if(l[-s[x]].empty()||l[-s[x]].back()!=x) continue;
l[-s[x]].pop_back();
if(r[-s[x]].empty()) continue;
target=r[-s[x]].back();
int target2=target;
target+=root->range_sum(target,target);
int cur=x+root->range_sum(x,x);
r[-s[x]].pop_back();
int dist=abs(cur-target)-1;
counter+=dist;
root->add(x+1,target2,1);
}
//cout << counter << "\n";
}
//cout << counter << " check\n";
return counter;
}
Compilation message
shoes.cpp: In member function 'void node::lazy_propagate()':
shoes.cpp:44:28: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
44 | lset = set_val = 0LL;
| ~~~~~~~~^~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
296 KB |
Output is correct |
4 |
Correct |
1 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 |
1 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
212 KB |
Output is correct |
9 |
Correct |
1 ms |
212 KB |
Output is correct |
10 |
Correct |
1 ms |
212 KB |
Output is correct |
11 |
Correct |
1 ms |
212 KB |
Output is correct |
12 |
Correct |
1 ms |
212 KB |
Output is correct |
13 |
Correct |
0 ms |
212 KB |
Output is correct |
14 |
Correct |
1 ms |
300 KB |
Output is correct |
15 |
Correct |
1 ms |
212 KB |
Output is correct |
16 |
Correct |
1 ms |
212 KB |
Output is correct |
17 |
Correct |
0 ms |
212 KB |
Output is correct |
18 |
Correct |
0 ms |
212 KB |
Output is correct |
19 |
Correct |
1 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 |
0 ms |
212 KB |
Output is correct |
23 |
Correct |
1 ms |
212 KB |
Output is correct |
24 |
Correct |
1 ms |
296 KB |
Output is correct |
25 |
Correct |
0 ms |
212 KB |
Output is correct |
26 |
Correct |
1 ms |
212 KB |
Output is correct |
27 |
Correct |
1 ms |
212 KB |
Output is correct |
28 |
Correct |
0 ms |
300 KB |
Output is correct |
29 |
Correct |
1 ms |
212 KB |
Output is correct |
30 |
Correct |
1 ms |
212 KB |
Output is correct |
31 |
Correct |
0 ms |
212 KB |
Output is correct |
32 |
Correct |
1 ms |
212 KB |
Output is correct |
33 |
Correct |
1 ms |
212 KB |
Output is correct |
34 |
Correct |
0 ms |
212 KB |
Output is correct |
35 |
Correct |
1 ms |
296 KB |
Output is correct |
36 |
Correct |
0 ms |
212 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
212 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 |
212 KB |
Output is correct |
5 |
Correct |
1 ms |
260 KB |
Output is correct |
6 |
Correct |
0 ms |
212 KB |
Output is correct |
7 |
Correct |
1 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
212 KB |
Output is correct |
9 |
Correct |
0 ms |
212 KB |
Output is correct |
10 |
Correct |
1 ms |
212 KB |
Output is correct |
11 |
Correct |
1 ms |
212 KB |
Output is correct |
12 |
Correct |
1 ms |
212 KB |
Output is correct |
13 |
Correct |
1 ms |
212 KB |
Output is correct |
14 |
Correct |
1 ms |
212 KB |
Output is correct |
15 |
Correct |
1 ms |
340 KB |
Output is correct |
16 |
Correct |
1 ms |
340 KB |
Output is correct |
17 |
Correct |
1 ms |
596 KB |
Output is correct |
18 |
Correct |
2 ms |
1492 KB |
Output is correct |
19 |
Correct |
2 ms |
1492 KB |
Output is correct |
20 |
Correct |
16 ms |
13140 KB |
Output is correct |
21 |
Correct |
14 ms |
13140 KB |
Output is correct |
22 |
Correct |
146 ms |
128524 KB |
Output is correct |
23 |
Correct |
127 ms |
128440 KB |
Output is correct |
24 |
Correct |
140 ms |
128436 KB |
Output is correct |
25 |
Correct |
160 ms |
128388 KB |
Output is correct |
26 |
Correct |
143 ms |
129088 KB |
Output is correct |
27 |
Correct |
132 ms |
128852 KB |
Output is correct |
28 |
Correct |
147 ms |
129032 KB |
Output is correct |
29 |
Correct |
145 ms |
129104 KB |
Output is correct |
30 |
Correct |
146 ms |
129040 KB |
Output is correct |
31 |
Correct |
140 ms |
129076 KB |
Output is correct |
32 |
Correct |
161 ms |
129148 KB |
Output is correct |
33 |
Correct |
152 ms |
128860 KB |
Output is correct |
34 |
Correct |
145 ms |
129232 KB |
Output is correct |
35 |
Correct |
0 ms |
212 KB |
Output is correct |
36 |
Correct |
1 ms |
296 KB |
Output is correct |
37 |
Correct |
154 ms |
129092 KB |
Output is correct |
38 |
Correct |
151 ms |
129056 KB |
Output is correct |
39 |
Correct |
144 ms |
129092 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
340 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
212 KB |
Output is correct |
5 |
Correct |
178 ms |
134096 KB |
Output is correct |
6 |
Correct |
159 ms |
129784 KB |
Output is correct |
7 |
Correct |
176 ms |
134504 KB |
Output is correct |
8 |
Correct |
150 ms |
129096 KB |
Output is correct |
9 |
Correct |
176 ms |
134732 KB |
Output is correct |
10 |
Correct |
184 ms |
131608 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
296 KB |
Output is correct |
4 |
Correct |
1 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 |
1 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
212 KB |
Output is correct |
9 |
Correct |
1 ms |
212 KB |
Output is correct |
10 |
Correct |
1 ms |
212 KB |
Output is correct |
11 |
Correct |
1 ms |
212 KB |
Output is correct |
12 |
Correct |
1 ms |
212 KB |
Output is correct |
13 |
Correct |
0 ms |
212 KB |
Output is correct |
14 |
Correct |
1 ms |
300 KB |
Output is correct |
15 |
Correct |
1 ms |
212 KB |
Output is correct |
16 |
Correct |
1 ms |
212 KB |
Output is correct |
17 |
Correct |
0 ms |
212 KB |
Output is correct |
18 |
Correct |
0 ms |
212 KB |
Output is correct |
19 |
Correct |
1 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 |
0 ms |
212 KB |
Output is correct |
23 |
Correct |
1 ms |
212 KB |
Output is correct |
24 |
Correct |
1 ms |
296 KB |
Output is correct |
25 |
Correct |
0 ms |
212 KB |
Output is correct |
26 |
Correct |
1 ms |
212 KB |
Output is correct |
27 |
Correct |
1 ms |
212 KB |
Output is correct |
28 |
Correct |
0 ms |
300 KB |
Output is correct |
29 |
Correct |
1 ms |
212 KB |
Output is correct |
30 |
Correct |
1 ms |
212 KB |
Output is correct |
31 |
Correct |
0 ms |
212 KB |
Output is correct |
32 |
Correct |
1 ms |
212 KB |
Output is correct |
33 |
Correct |
1 ms |
212 KB |
Output is correct |
34 |
Correct |
0 ms |
212 KB |
Output is correct |
35 |
Correct |
1 ms |
296 KB |
Output is correct |
36 |
Correct |
0 ms |
212 KB |
Output is correct |
37 |
Correct |
1 ms |
212 KB |
Output is correct |
38 |
Correct |
1 ms |
340 KB |
Output is correct |
39 |
Correct |
1 ms |
424 KB |
Output is correct |
40 |
Correct |
1 ms |
596 KB |
Output is correct |
41 |
Correct |
2 ms |
1620 KB |
Output is correct |
42 |
Correct |
2 ms |
1620 KB |
Output is correct |
43 |
Correct |
2 ms |
1620 KB |
Output is correct |
44 |
Correct |
3 ms |
1620 KB |
Output is correct |
45 |
Correct |
3 ms |
1492 KB |
Output is correct |
46 |
Correct |
2 ms |
1492 KB |
Output is correct |
47 |
Correct |
2 ms |
1492 KB |
Output is correct |
48 |
Correct |
2 ms |
1588 KB |
Output is correct |
49 |
Correct |
2 ms |
1588 KB |
Output is correct |
50 |
Correct |
2 ms |
1492 KB |
Output is correct |
51 |
Correct |
2 ms |
1464 KB |
Output is correct |
52 |
Correct |
2 ms |
1620 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
296 KB |
Output is correct |
4 |
Correct |
1 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 |
1 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
212 KB |
Output is correct |
9 |
Correct |
1 ms |
212 KB |
Output is correct |
10 |
Correct |
1 ms |
212 KB |
Output is correct |
11 |
Correct |
1 ms |
212 KB |
Output is correct |
12 |
Correct |
1 ms |
212 KB |
Output is correct |
13 |
Correct |
0 ms |
212 KB |
Output is correct |
14 |
Correct |
1 ms |
300 KB |
Output is correct |
15 |
Correct |
1 ms |
212 KB |
Output is correct |
16 |
Correct |
1 ms |
212 KB |
Output is correct |
17 |
Correct |
0 ms |
212 KB |
Output is correct |
18 |
Correct |
0 ms |
212 KB |
Output is correct |
19 |
Correct |
1 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 |
0 ms |
212 KB |
Output is correct |
23 |
Correct |
1 ms |
212 KB |
Output is correct |
24 |
Correct |
1 ms |
296 KB |
Output is correct |
25 |
Correct |
0 ms |
212 KB |
Output is correct |
26 |
Correct |
1 ms |
212 KB |
Output is correct |
27 |
Correct |
1 ms |
212 KB |
Output is correct |
28 |
Correct |
0 ms |
300 KB |
Output is correct |
29 |
Correct |
1 ms |
212 KB |
Output is correct |
30 |
Correct |
1 ms |
212 KB |
Output is correct |
31 |
Correct |
0 ms |
212 KB |
Output is correct |
32 |
Correct |
1 ms |
212 KB |
Output is correct |
33 |
Correct |
1 ms |
212 KB |
Output is correct |
34 |
Correct |
0 ms |
212 KB |
Output is correct |
35 |
Correct |
1 ms |
296 KB |
Output is correct |
36 |
Correct |
0 ms |
212 KB |
Output is correct |
37 |
Correct |
1 ms |
212 KB |
Output is correct |
38 |
Correct |
1 ms |
212 KB |
Output is correct |
39 |
Correct |
1 ms |
260 KB |
Output is correct |
40 |
Correct |
0 ms |
212 KB |
Output is correct |
41 |
Correct |
1 ms |
212 KB |
Output is correct |
42 |
Correct |
1 ms |
212 KB |
Output is correct |
43 |
Correct |
0 ms |
212 KB |
Output is correct |
44 |
Correct |
1 ms |
212 KB |
Output is correct |
45 |
Correct |
1 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 |
212 KB |
Output is correct |
49 |
Correct |
1 ms |
340 KB |
Output is correct |
50 |
Correct |
1 ms |
340 KB |
Output is correct |
51 |
Correct |
1 ms |
596 KB |
Output is correct |
52 |
Correct |
2 ms |
1492 KB |
Output is correct |
53 |
Correct |
2 ms |
1492 KB |
Output is correct |
54 |
Correct |
16 ms |
13140 KB |
Output is correct |
55 |
Correct |
14 ms |
13140 KB |
Output is correct |
56 |
Correct |
146 ms |
128524 KB |
Output is correct |
57 |
Correct |
127 ms |
128440 KB |
Output is correct |
58 |
Correct |
140 ms |
128436 KB |
Output is correct |
59 |
Correct |
160 ms |
128388 KB |
Output is correct |
60 |
Correct |
143 ms |
129088 KB |
Output is correct |
61 |
Correct |
132 ms |
128852 KB |
Output is correct |
62 |
Correct |
147 ms |
129032 KB |
Output is correct |
63 |
Correct |
145 ms |
129104 KB |
Output is correct |
64 |
Correct |
146 ms |
129040 KB |
Output is correct |
65 |
Correct |
140 ms |
129076 KB |
Output is correct |
66 |
Correct |
161 ms |
129148 KB |
Output is correct |
67 |
Correct |
152 ms |
128860 KB |
Output is correct |
68 |
Correct |
145 ms |
129232 KB |
Output is correct |
69 |
Correct |
0 ms |
212 KB |
Output is correct |
70 |
Correct |
1 ms |
296 KB |
Output is correct |
71 |
Correct |
154 ms |
129092 KB |
Output is correct |
72 |
Correct |
151 ms |
129056 KB |
Output is correct |
73 |
Correct |
144 ms |
129092 KB |
Output is correct |
74 |
Correct |
0 ms |
212 KB |
Output is correct |
75 |
Correct |
1 ms |
340 KB |
Output is correct |
76 |
Correct |
0 ms |
212 KB |
Output is correct |
77 |
Correct |
1 ms |
212 KB |
Output is correct |
78 |
Correct |
178 ms |
134096 KB |
Output is correct |
79 |
Correct |
159 ms |
129784 KB |
Output is correct |
80 |
Correct |
176 ms |
134504 KB |
Output is correct |
81 |
Correct |
150 ms |
129096 KB |
Output is correct |
82 |
Correct |
176 ms |
134732 KB |
Output is correct |
83 |
Correct |
184 ms |
131608 KB |
Output is correct |
84 |
Correct |
1 ms |
212 KB |
Output is correct |
85 |
Correct |
1 ms |
340 KB |
Output is correct |
86 |
Correct |
1 ms |
424 KB |
Output is correct |
87 |
Correct |
1 ms |
596 KB |
Output is correct |
88 |
Correct |
2 ms |
1620 KB |
Output is correct |
89 |
Correct |
2 ms |
1620 KB |
Output is correct |
90 |
Correct |
2 ms |
1620 KB |
Output is correct |
91 |
Correct |
3 ms |
1620 KB |
Output is correct |
92 |
Correct |
3 ms |
1492 KB |
Output is correct |
93 |
Correct |
2 ms |
1492 KB |
Output is correct |
94 |
Correct |
2 ms |
1492 KB |
Output is correct |
95 |
Correct |
2 ms |
1588 KB |
Output is correct |
96 |
Correct |
2 ms |
1588 KB |
Output is correct |
97 |
Correct |
2 ms |
1492 KB |
Output is correct |
98 |
Correct |
2 ms |
1464 KB |
Output is correct |
99 |
Correct |
2 ms |
1620 KB |
Output is correct |
100 |
Correct |
2 ms |
1620 KB |
Output is correct |
101 |
Correct |
20 ms |
13528 KB |
Output is correct |
102 |
Correct |
19 ms |
13268 KB |
Output is correct |
103 |
Correct |
249 ms |
134604 KB |
Output is correct |
104 |
Correct |
171 ms |
134516 KB |
Output is correct |
105 |
Correct |
203 ms |
131800 KB |
Output is correct |
106 |
Correct |
171 ms |
134556 KB |
Output is correct |
107 |
Correct |
162 ms |
129832 KB |
Output is correct |
108 |
Correct |
147 ms |
130220 KB |
Output is correct |
109 |
Correct |
145 ms |
129220 KB |
Output is correct |
110 |
Correct |
155 ms |
129128 KB |
Output is correct |
111 |
Correct |
180 ms |
133836 KB |
Output is correct |
112 |
Correct |
217 ms |
133220 KB |
Output is correct |
113 |
Correct |
232 ms |
129964 KB |
Output is correct |
114 |
Correct |
183 ms |
134576 KB |
Output is correct |
115 |
Correct |
192 ms |
134544 KB |
Output is correct |