@@ -160,8 +160,6 @@ Since we only remove the most recent stations, this motivates the use of a [stac
160
160
#include < bits/stdc++.h>
161
161
using namespace std ;
162
162
163
- #define sz (x ) (int)x.size()
164
-
165
163
struct Point {
166
164
double x , y ;
167
165
};
@@ -190,7 +188,7 @@ int main() {
190
188
cur .y = abs (cur .y );
191
189
192
190
// always take the one with the lowest y coord
193
- if (sz ( stck ) && stck .back ().x == cur .x ) {
191
+ if (( int ) stck . size ( ) && stck .back ().x == cur .x ) {
194
192
if (cur .y >= stck .back ().y ) {
195
193
continue ;
196
194
} else if (cur .y < stck .back ().y ) {
@@ -199,26 +197,32 @@ int main() {
199
197
}
200
198
201
199
// find "crosses"
202
- while (sz (stck ) > 1 && max_point (stck [sz (stck ) - 2 ], stck .back ()) >
203
- max_point (stck .back (), cur )) {
200
+ while ((int )stck .size () > 1 && max_point (stck [(int )stck .size () - 2 ], stck .back ()) > max_point (stck .back (), cur )) {
204
201
stck .pop_back ();
205
202
}
206
203
207
204
stck .push_back (cur );
208
205
}
209
206
210
207
// out of bounds
211
- while (sz (stck ) > 1 && max_point(stck [0 ], stck [1 ]) < 0 ) stck .pop_front ();
212
- while (sz (stck ) > 1 && max_point (stck [sz (stck ) - 2 ], stck .back ()) > l )
208
+ while ((int )stck.size() > 1 && max_point(stck [0 ], stck [1 ]) < 0 ) {
209
+ stck .pop_front ();
210
+ }
211
+
212
+ while ((int )stck .size () > 1 && max_point (stck [(int )stck .size () - 2 ], stck .back ()) > l ) {
213
213
stck .pop_back ();
214
+ }
214
215
215
216
double ans = 0 ;
216
- for (int x = 0 ; x < sz (stck ); x ++) {
217
- Point left = {(x ? max_point(stck [x ], stck [x - 1 ]) : 0 ), 0 };
218
- Point right = {(x < sz(stck ) - 1 ? max_point(stck [x ], stck [x + 1 ]) : l ),
219
- 0 };
220
-
221
- if (left.x < 0 || right.x > l || right.x < 0 || left.x > l ) continue;
217
+ for (int x = 0 ; x < (int )stck .size (); x ++) {
218
+ // get critical points stck[x] is in charge of
219
+ Point left = {0 , 0 };
220
+ Point right {l, 0 };
221
+
222
+ if (x ) { left .x = max_point (stck [x ], stck [x - 1 ]); }
223
+ if (x < (int )stck.size() - 1) { right .x = max_point (stck [x ], stck [x + 1 ]); }
224
+
225
+ if (left.x < 0 || right.x > l || right.x < 0 || left.x > l ) { continue ; }
222
226
223
227
ans = max ({ans , dist(stck [x ], left ), dist(stck [x ], right )});
224
228
}
0 commit comments