1#![feature(test)]
4
5extern crate test;
6
7struct Sol73 {}
9
10impl Sol73 {
11 pub fn set_zeroes(matrix: &mut [Vec<i32>]) {
14 let (rows, cols) = (matrix.len(), matrix[0].len());
15
16 let zero_row0 = matrix[0].contains(&0);
17 let zero_col0 = matrix.iter().any(|row| row[0] == 0);
18
19 for r in 1..rows {
20 for c in 1..cols {
21 if matrix[r][c] == 0 {
22 (matrix[0][c], matrix[r][0]) = (0, 0);
23 }
24 }
25 }
26
27 for r in 1..rows {
28 for c in 1..cols {
29 if matrix[0][c] == 0 || matrix[r][0] == 0 {
30 matrix[r][c] = 0;
31 }
32 }
33 }
34
35 if zero_col0 {
36 for row in matrix.iter_mut() {
37 row[0] = 0;
38 }
39 }
40 if zero_row0 {
41 for v in matrix[0].iter_mut() {
42 *v = 0;
43 }
44 }
45 }
46}
47
48struct Sol747 {}
50
51impl Sol747 {
52 pub fn dominant_index(nums: Vec<i32>) -> i32 {
54 let xv = nums.iter().max().unwrap_or(&-1);
55
56 if nums.iter().filter(|&n| n != xv).all(|n| 2 * n <= *xv) {
57 return nums.iter().position(|n| n == xv).unwrap() as i32;
58 }
59
60 -1
61 }
62}
63
64struct Sol766 {}
66
67impl Sol766 {
68 pub fn is_toeplitz_matrix(matrix: Vec<Vec<i32>>) -> bool {
69 matrix
70 .iter()
71 .zip(matrix.iter().skip(1))
72 .all(|(tr, br)| tr.iter().zip(br.iter().skip(1)).all(|(lv, rv)| lv == rv))
73 }
74}
75
76struct Sol798 {}
78
79impl Sol798 {
80 pub fn best_rotation(nums: Vec<i32>) -> i32 {
83 let n = nums.len();
84
85 let mut scores = vec![0; n];
86 for (i, &p) in nums.iter().enumerate() {
87 let (left, right) = ((n + i - p as usize + 1) % n, (i + 1) % n);
88 scores[left] -= 1;
89 scores[right] += 1;
90 if left > right {
91 scores[0] -= 1;
92 }
93 }
94
95 let (mut cur, mut best) = (0, -(n as i32));
96 scores.into_iter().enumerate().fold(0, |x, (i, score)| {
97 cur += score;
98 if cur > best {
99 best = cur;
100 i
101 } else {
102 x
103 }
104 }) as _
105 }
106}
107
108struct Sol1184;
110
111impl Sol1184 {
112 pub fn distance_between_bus_stops(distance: Vec<i32>, start: i32, destination: i32) -> i32 {
113 let (mut src, mut dst) = (start as usize, destination as usize);
114 if src > dst {
115 (src, dst) = (dst, src);
116 }
117
118 distance[src..dst]
119 .iter()
120 .sum::<i32>()
121 .min(distance[dst..].iter().chain(distance[..src].iter()).sum())
122 }
123}
124
125struct Sol1394;
127
128impl Sol1394 {
129 pub fn find_lucky(arr: Vec<i32>) -> i32 {
131 let mut freqs = [0; 500 + 1];
132 for n in arr {
133 freqs[n as usize] += 1;
134 }
135
136 freqs
137 .iter()
138 .enumerate()
139 .rev()
140 .filter(|(_, f)| **f > 0)
141 .find(|(n, f)| *f == n)
142 .map(|(n, _)| n as i32)
143 .unwrap_or(-1)
144 }
145}
146
147struct Sol1450 {}
149impl Sol1450 {
150 pub fn busy_student(start_time: Vec<i32>, end_time: Vec<i32>, query_time: i32) -> i32 {
151 start_time
152 .iter()
153 .zip(end_time.iter())
154 .fold(0, |count, (s, e)| {
155 if *s <= query_time && query_time <= *e {
156 count + 1
157 } else {
158 count
159 }
160 })
161 }
162}
163
164struct Sol1534;
166
167impl Sol1534 {
168 pub fn count_good_triplets(arr: Vec<i32>, a: i32, b: i32, c: i32) -> i32 {
170 let mut count = 0;
171 for (i, x) in arr.iter().enumerate() {
172 for (j, y) in arr.iter().enumerate().skip(i + 1) {
173 if (x - y).abs() <= a {
174 for z in arr.iter().skip(j + 1) {
175 if (y - z).abs() <= b && (z - x).abs() <= c {
176 count += 1;
177 }
178 }
179 }
180 }
181 }
182
183 count
184 }
185}
186
187struct Sol1550;
189
190impl Sol1550 {
191 pub fn three_consecutive_odds(arr: Vec<i32>) -> bool {
192 arr.windows(3)
193 .inspect(|v| println!("-> {:?}", v))
194 .any(|v| v[0] & v[1] & v[2] & 1 == 1)
195 }
196}
197
198struct Sol1752;
200
201impl Sol1752 {
202 pub fn check(nums: Vec<i32>) -> bool {
203 println!(" * {:?}", nums);
204 println!(
205 ":: {}",
206 nums.windows(2).fold(
207 if nums[0] < nums[nums.len() - 1] { 1 } else { 0 },
208 |r, v| if v[1] < v[0] { r + 1 } else { r }
209 ) <= 1
210 );
211
212 let mut nums = nums;
213 let Some(pinv) = nums.windows(2).position(|v| v[1] < v[0]) else {
214 return true;
215 };
216
217 nums.rotate_left(pinv + 1);
218 nums.windows(2).all(|v| v[0] <= v[1])
219 }
220}
221
222struct Sol1796 {}
224
225impl Sol1796 {
226 pub fn second_highest(s: String) -> i32 {
227 s.chars()
228 .fold((-1, -1), |(x, x2), chr| match chr {
229 '0'..='9' => {
230 let d = ('0'..='9').position(|x| x == chr).unwrap() as i32;
231 if d == x {
232 (x, x2)
233 } else if x < d {
234 (d, x)
235 } else if x2 < d {
236 (x, d)
237 } else {
238 (x, x2)
239 }
240 }
241 _ => (x, x2),
242 })
243 .1
244 }
245}
246
247struct Sol1800;
249
250impl Sol1800 {
251 pub fn max_ascending_sum(nums: Vec<i32>) -> i32 {
252 nums.windows(2)
253 .fold((nums[0], nums[0]), |mut kadan, v| {
254 if v[1] > v[0] {
255 kadan.0 += v[1];
256 } else {
257 kadan.0 = v[1];
258 }
259 kadan.1 = kadan.1.max(kadan.0);
260
261 kadan
262 })
263 .1
264 }
265}
266
267struct Sol1920;
269
270impl Sol1920 {
271 pub fn build_array(nums: Vec<i32>) -> Vec<i32> {
273 println!("** {:?}", nums);
274
275 fn in_place(nums: Vec<i32>) -> Vec<i32> {
276 let mut nums = nums;
277 for i in 0..nums.len() {
278 nums[i] += 1000 * (nums[nums[i] as usize] % 1000);
279 }
280 for n in nums.iter_mut() {
281 *n /= 1000;
282 }
283
284 nums
285 }
286 println!(":: {:?}", in_place(nums.to_vec()));
287
288 nums.iter().fold(vec![], |mut v, &n| {
289 v.push(nums[n as usize]);
290 v
291 })
292 }
293}
294
295struct Sol2016 {}
297
298impl Sol2016 {
299 pub fn maximum_difference(nums: Vec<i32>) -> i32 {
300 let mut vmin = nums[0];
301 let mut xdiff = -1;
302
303 for n in nums.into_iter().skip(1) {
304 if n > vmin {
305 xdiff = xdiff.max(n - vmin);
306 }
307 vmin = vmin.min(n);
308 }
309
310 xdiff
311 }
312}
313
314struct Sol2017;
316
317impl Sol2017 {
318 pub fn grid_game(grid: Vec<Vec<i32>>) -> i64 {
319 let mut top = grid[0].iter().map(|&n| n as i64).sum::<i64>();
320 let mut bottom = 0;
321
322 (0..grid[0].len()).fold(i64::MAX, |mx, i| {
323 top -= grid[0][i] as i64;
324 bottom += grid[1][i] as i64;
325 mx.min(top.max(bottom - grid[1][i] as i64))
326 })
327 }
328}
329
330struct Sol2033;
332
333impl Sol2033 {
334 pub fn min_operations(grid: Vec<Vec<i32>>, x: i32) -> i32 {
335 let mut nums = vec![];
336 for r in 0..grid.len() {
337 for c in 0..grid[0].len() {
338 nums.push(grid[r][c]);
339 }
340 }
341
342 nums.sort_unstable();
343 let median = nums[nums.len() / 2];
344
345 println!("-> {:?}", (&nums, median));
346
347 let r = median % x;
348 let mut ops = 0;
349 for n in nums {
350 if n % x != r {
351 return -1;
352 }
353 ops += (n - median).abs() / x;
354 }
355
356 ops
357 }
358}
359
360struct Sol2094;
362
363impl Sol2094 {
364 pub fn find_even_numbers(digits: Vec<i32>) -> Vec<i32> {
365 let mut freq = [0; 10];
366 digits.iter().for_each(|&d| freq[d as usize] += 1);
367
368 println!("-> {:?}", freq);
369
370 let mut evens = vec![];
371 for h in 1..=9 {
372 if freq[h] == 0 {
373 continue;
374 }
375 freq[h] -= 1;
376 for t in 0..=9 {
377 if freq[t] == 0 {
378 continue;
379 }
380 freq[t] -= 1;
381 for o in (0..=8).step_by(2) {
382 if freq[o] > 0 {
383 evens.push((100 * h + 10 * t + o) as i32);
384 }
385 }
386 freq[t] += 1;
387 }
388 freq[h] += 1;
389 }
390
391 evens
392 }
393}
394
395struct Sol2099 {}
397
398impl Sol2099 {
399 pub fn max_subsequence(nums: Vec<i32>, k: i32) -> Vec<i32> {
400 use std::cmp::Reverse;
401
402 let mut sorted: Vec<_> = nums.iter().enumerate().collect();
403 sorted.sort_by_key(|(_, n)| Reverse(*n));
404 println!("-> {sorted:?}");
405
406 sorted[0..k as usize].sort();
407 println!("-> {sorted:?}");
408
409 sorted[0..k as usize].iter().map(|(_, n)| **n).collect()
410 }
411}
412
413struct Sol2145;
415
416impl Sol2145 {
417 pub fn number_of_arrays(differences: Vec<i32>, lower: i32, upper: i32) -> i32 {
419 let (mut x, mut n) = (0, 0);
420 let mut v = 0;
421 for diff in differences {
422 v += diff;
423 x = x.max(v);
424 n = n.min(v);
425
426 if x - n > upper - lower {
427 return 0;
428 }
429 }
430
431 upper - lower - (x - n) + 1
432 }
433}
434
435struct Sol2176;
437
438impl Sol2176 {
439 pub fn count_pairs(nums: Vec<i32>, k: i32) -> i32 {
440 let mut count = 0;
441 for (i, &x) in nums.iter().enumerate().take(nums.len() - 1) {
442 for (j, &y) in nums.iter().enumerate().skip(i + 1) {
443 if x == y && (i * j).is_multiple_of(k as usize) {
444 count += 1;
445 }
446 }
447 }
448
449 count
450 }
451}
452
453struct Sol2190 {}
455
456impl Sol2190 {
457 pub fn most_frequent(nums: Vec<i32>, key: i32) -> i32 {
458 use std::collections::HashMap;
459
460 let mut freqs = HashMap::new();
461 for w in nums.windows(2) {
462 if w[0] == key {
463 freqs.entry(w[1]).and_modify(|f| *f += 1).or_insert(1);
464 }
465 }
466
467 println!(
468 ":? {}",
469 freqs.iter().max_by_key(|&(_, f)| f).map_or(0, |(&n, _)| n)
470 );
471
472 let xfreq = freqs.values().max().unwrap();
473 *freqs.iter().find(|(_, f)| *f == xfreq).unwrap().0
474 }
475}
476
477struct Sol2200 {}
479
480impl Sol2200 {
481 pub fn find_k_distant_indices(nums: Vec<i32>, key: i32, k: i32) -> Vec<i32> {
482 let k = k as usize;
483 let mut l = 0;
484 nums.iter()
485 .enumerate()
486 .filter(|(_, n)| **n == key)
487 .fold(vec![], |mut kdists, (r, _)| {
488 for i in l.max(r.saturating_sub(k))..=(r + k).min(nums.len() - 1) {
489 kdists.push(i as i32);
490 }
491 l = r + k + 1;
492
493 kdists
494 })
495 }
496}
497
498struct Sol2210 {}
500
501impl Sol2210 {
502 pub fn count_hill_valley(mut nums: Vec<i32>) -> i32 {
503 nums.dedup();
504 println!("-> {nums:?}");
505
506 nums.windows(3).fold(0, |count, w| {
507 if w[0] < w[1] && w[1] > w[2] || w[0] > w[1] && w[1] < w[2] {
508 count + 1
509 } else {
510 count
511 }
512 })
513 }
514}
515
516struct Sol2248 {}
518
519impl Sol2248 {
520 pub fn intersection(nums: Vec<Vec<i32>>) -> Vec<i32> {
521 use std::collections::BTreeMap;
522
523 let mut freqs = BTreeMap::new();
524 for nums in &nums {
525 for n in nums {
526 freqs.entry(n).and_modify(|f| *f += 1).or_insert(1);
527 }
528 }
529
530 freqs
531 .into_iter()
532 .filter(|(_, f)| *f == nums.len())
533 .map(|(&n, _)| n)
534 .collect::<Vec<_>>()
535 }
536}
537
538struct Sol2341 {}
540
541impl Sol2341 {
542 pub fn number_of_pairs(mut nums: Vec<i32>) -> Vec<i32> {
543 nums.sort_unstable();
544
545 let (pairs, leftovers) = nums
546 .chunk_by(PartialEq::eq)
547 .fold((0, 0), |(pairs, leftovers), chunk| {
548 (pairs + chunk.len() / 2, leftovers + (chunk.len() & 1))
549 });
550
551 vec![pairs as i32, leftovers as i32]
552 }
553}
554
555struct Sol2419 {}
557
558impl Sol2419 {
559 pub fn longest_subarray(nums: Vec<i32>) -> i32 {
560 let (mut x, mut cur) = (0, 0);
561
562 nums.iter().fold(0, |mut x_len, &n| {
563 if x < n {
564 x = n;
565 (x_len, cur) = (0, 0);
566 }
567
568 if x == n {
569 cur += 1;
570 } else {
571 cur = 0;
572 }
573
574 x_len.max(cur)
575 })
576 }
577}
578
579struct Sol2536 {}
581
582impl Sol2536 {
583 pub fn range_add_queries(n: i32, queries: Vec<Vec<i32>>) -> Vec<Vec<i32>> {
584 let n = n as usize;
585
586 let diffs = queries
587 .iter()
588 .fold(vec![vec![0; n + 1]; n + 1], |mut diffs, query| {
589 let [r1, c1, r2, c2, ..] = query[..] else {
590 panic!()
591 };
592
593 let (r1, r2, c1, c2) = (r1 as usize, r2 as usize, c1 as usize, c2 as usize);
594
595 diffs[r1][c1] += 1;
596 diffs[r2 + 1][c1] -= 1;
597 diffs[r1][c2 + 1] -= 1;
598 diffs[r2 + 1][c2 + 1] += 1;
599
600 diffs
601 });
602
603 println!("-> {diffs:?}");
604
605 let mut matrix = vec![vec![0; n as usize]; n as usize];
606 for r in 0..n {
607 for c in 0..n {
608 let left = if r == 0 { 0 } else { matrix[r - 1][c] };
609 let above = if c == 0 { 0 } else { matrix[r][c - 1] };
610 let diagonal = if r == 0 || c == 0 {
611 0
612 } else {
613 matrix[r - 1][c - 1]
614 };
615
616 matrix[r][c] = diffs[r][c] + left + above - diagonal;
617 }
618 }
619
620 matrix
621 }
622}
623
624struct Sol2780;
626
627impl Sol2780 {
628 pub fn minimum_index(nums: Vec<i32>) -> i32 {
629 let mut copy = nums.to_vec();
630 copy.sort_unstable();
631
632 let (mut dominent, mut frq) = (0, 0);
633 copy.iter().fold((0, 0), |(d, mut f), &n| {
634 if d == n {
635 f += 1;
636 } else {
637 f = 1;
638 }
639
640 if f > frq {
641 frq = f;
642 dominent = n;
643 }
644
645 (n, f)
646 });
647
648 println!("-> {:?}", (dominent, frq));
649
650 let mut f = 0;
651 for (i, &n) in nums.iter().enumerate() {
652 if n == dominent {
653 f += 1;
654 }
655
656 if f > i.div_ceil(2) && (frq - f) > (nums.len() - i - 1) / 2 {
657 return i as i32;
658 }
659 }
660
661 -1
662 }
663
664 #[expect(non_snake_case)]
666 fn Boyer_Moore(nums: Vec<i32>) -> i32 {
667 nums.iter()
668 .fold((nums[0], 0), |(mut majority, mut frq), &n| {
669 if n == majority {
670 frq += 1;
671 } else {
672 frq -= 1;
673 }
674
675 if frq == 0 {
676 majority = n;
677 }
678
679 (majority, frq)
680 })
681 .0
682 }
683}
684
685struct Sol2873;
687
688impl Sol2873 {
689 pub fn maximum_triplet_value(nums: Vec<i32>) -> i64 {
690 let mut value = -1;
691 for i in 0..nums.len() {
692 for j in i + 1..nums.len() {
693 for k in j + 1..nums.len() {
694 value = value.max((nums[i] - nums[j]) as i64 * nums[k] as i64);
695 }
696 }
697 }
698
699 value.max(0)
700 }
701}
702
703struct Sol2874;
705
706impl Sol2874 {
707 pub fn maximum_triplet_value(nums: Vec<i32>) -> i64 {
708 let mut value = 0;
709 let (mut lmax, mut diff) = (0, 0);
710 for n in nums {
711 value = value.max(diff as i64 * n as i64);
712
713 diff = diff.max(lmax - n);
714 lmax = lmax.max(n);
715 }
716
717 value
718 }
719}
720
721struct Sol2894 {}
723
724impl Sol2894 {
725 pub fn difference_of_sums(n: i32, m: i32) -> i32 {
726 2 * (1..=n).filter(|&v| v % m != 0).sum::<i32>() - n * (n + 1) / 2
727 }
728}
729
730struct Sol2942 {}
732
733impl Sol2942 {
734 pub fn find_words_containing(words: Vec<String>, x: char) -> Vec<i32> {
735 println!(
736 ":: {:?}",
737 words
738 .iter()
739 .enumerate()
740 .filter_map(|(i, word)| if word.contains(x) {
741 Some(i as i32)
742 } else {
743 None
744 })
745 .collect::<Vec<_>>()
746 );
747
748 words
749 .iter()
750 .enumerate()
751 .filter(|(_, word)| word.contains(x))
752 .map(|(i, _)| i as i32)
753 .collect()
754 }
755}
756
757struct Sol2946 {}
759
760impl Sol2946 {
761 pub fn are_similar(mat: Vec<Vec<i32>>, k: i32) -> bool {
762 let k = k as usize % mat[0].len();
763
764 mat.iter().enumerate().all(|(r, row)| {
765 row.iter()
766 .enumerate()
767 .all(|(c, &n)| n == mat[r][(c + k) % mat[0].len()])
768 })
769 }
770}
771
772struct Sol2966 {}
774
775impl Sol2966 {
776 pub fn divide_array(mut nums: Vec<i32>, k: i32) -> Vec<Vec<i32>> {
777 nums.sort_unstable();
778 nums.chunks(3)
779 .map(|chk| {
780 if chk[2] - chk[0] > k {
781 None
782 } else {
783 Some(chk.to_vec())
784 }
785 })
786 .collect::<Option<Vec<Vec<i32>>>>()
787 .unwrap_or_default()
788 }
789}
790
791struct Sol3105;
793
794impl Sol3105 {
795 pub fn longest_monotonic_subarray(nums: Vec<i32>) -> i32 {
796 let (mut asc, mut desc) = (0, 0);
797 nums.windows(2).fold([0, 0], |mut r, v| {
798 if v[0] > v[1] {
799 r[0] += 1;
800 desc = desc.max(r[0]);
801 } else {
802 r[0] = 0;
803 }
804 if v[1] > v[0] {
805 r[1] += 1;
806 asc = asc.max(r[1]);
807 } else {
808 r[1] = 0;
809 }
810 println!("{:?}", r);
811 r
812 });
813
814 println!(":: {:?}", asc.max(desc) + 1);
815
816 match (asc, desc) {
817 (0, 0) => 1,
818 _ => asc.max(desc) + 1,
819 }
820 }
821}
822
823struct Sol3151;
825
826impl Sol3151 {
827 pub fn is_array_special(nums: Vec<i32>) -> bool {
828 nums.windows(2)
829 .fold(true, |r, v| if (v[0] ^ v[1]) & 1 == 0 { false } else { r })
830 }
831}
832
833struct Sol3169;
835
836impl Sol3169 {
837 pub fn count_days(days: i32, meetings: Vec<Vec<i32>>) -> i32 {
838 use std::collections::BTreeMap;
839
840 let mut meetings = meetings;
841 for meeting in meetings.iter_mut() {
842 meeting[1] += 1;
843 }
844
845 let mut sweep = BTreeMap::new();
846 for meeting in &meetings {
847 sweep
848 .entry(&meeting[0])
849 .and_modify(|f| *f += 1)
850 .or_insert(1);
851 sweep
852 .entry(&meeting[1])
853 .and_modify(|f| *f -= 1)
854 .or_insert(-1);
855 }
856
857 let days = days + 1;
858 sweep.entry(&days).or_insert(0);
859
860 println!("-> {:?}", (std::any::type_name_of_val(&sweep), &sweep));
861
862 let (mut cur_meeting, mut cur_day) = (0, 1);
863 sweep.iter().fold(0, |mut rst, (&day, &diff)| {
864 if cur_meeting == 0 {
865 rst += day - cur_day;
866 }
867 cur_meeting += diff;
868 cur_day = *day;
869
870 rst
871 })
872 }
873}
874
875struct Sol3195 {}
877
878impl Sol3195 {
879 pub fn minimum_area(grid: Vec<Vec<i32>>) -> i32 {
880 let (mut left, mut right) = (grid[0].len(), 0);
881 let (mut top, mut bottom) = (grid.len(), 0);
882
883 for (r, row) in grid.iter().enumerate() {
884 for (c, &n) in row.iter().enumerate() {
885 if n == 1 {
886 left = left.min(c);
887 right = right.max(c);
888
889 top = top.min(r);
890 bottom = bottom.max(r);
891 }
892 }
893 }
894
895 ((right - left + 1) * (bottom - top + 1)) as _
896 }
897}
898
899struct Sol3355 {}
901
902impl Sol3355 {
903 pub fn is_zero_array(nums: Vec<i32>, queries: Vec<Vec<i32>>) -> bool {
904 let mut diffs = vec![0; nums.len() + 1];
905 for query in queries {
906 diffs[query[0] as usize] += 1;
907 diffs[query[1] as usize + 1] -= 1;
908 }
909
910 let mut diffs_sum = vec![];
911 let mut sum = 0;
912 for diff in diffs {
913 sum += diff;
914 diffs_sum.push(sum);
915 }
916
917 println!("-> {diffs_sum:?}");
918
919 nums.into_iter()
920 .zip(diffs_sum)
921 .all(|(num, diff_sum)| num <= diff_sum)
922 }
923}
924
925struct Sol3392;
927
928impl Sol3392 {
929 pub fn count_subarrays(nums: Vec<i32>) -> i32 {
930 println!(
931 ":: {}",
932 nums.to_vec().windows(3).fold(0, |count, v| {
933 if 2 * (v[0] + v[2]) == v[1] {
934 count + 1
935 } else {
936 count
937 }
938 })
939 );
940
941 let mut count = 0;
942 for i in 2..nums.len() {
943 if 2 * (nums[i - 2] + nums[i]) == nums[i - 1] {
944 count += 1;
945 }
946 }
947
948 count
949 }
950}
951
952struct Sol3394;
954
955impl Sol3394 {
956 #[expect(unused_variables)]
957 pub fn check_valid_cuts(n: i32, mut rectangles: Vec<Vec<i32>>) -> bool {
958 let mut check = |offset| {
959 rectangles.sort_unstable_by_key(|v| v[offset]);
960
961 let mut gaps = 0;
962 rectangles
963 .iter()
964 .skip(1)
965 .fold(rectangles[0][offset + 2], |end: i32, rectangle| {
966 if end <= rectangle[offset] {
967 gaps += 1;
968 }
969
970 end.max(rectangle[offset + 2])
971 });
972
973 gaps >= 2
974 };
975
976 check(0) || check(1)
977 }
978}
979
980struct Sol3423 {}
982
983impl Sol3423 {
984 pub fn max_adjacent_distance(nums: Vec<i32>) -> i32 {
986 println!(
987 ":: {}",
988 nums.iter()
989 .zip(nums.iter().cycle().skip(1))
990 .map(|(a, b)| (a - b).abs())
991 .max()
992 .unwrap()
993 );
994
995 nums.windows(2)
996 .fold((nums[0] - nums[nums.len() - 1]).abs(), |r, w| {
997 ((w[0] - w[1]).abs()).max(r)
998 })
999 }
1000}
1001
1002struct Sol3495 {}
1004
1005impl Sol3495 {
1006 pub fn min_operations(queries: Vec<Vec<i32>>) -> i64 {
1009 let ops = |n| {
1011 let mut i = 1;
1012 let mut base = 1;
1013
1014 let mut ops = 0;
1015 while base <= n {
1016 ops += ((i + 1) >> 1) * (((base << 1) - 1).min(n) - base + 1);
1017 i += 1;
1018 base <<= 1;
1019 }
1020
1021 ops
1022 };
1023
1024 println!(
1025 ":? {}",
1026 queries
1027 .iter()
1028 .map(|qry| (qry[0] as i64, qry[1] as i64))
1029 .map(|(l, r)| (1..31)
1030 .scan(1i64, |prv, power| {
1031 let start = l.max(*prv);
1032 let end = r.min(4 * *prv - 1);
1033 *prv *= 4;
1034
1035 let ops = if end >= start {
1036 (end - start + 1) * power
1037 } else {
1038 0
1039 };
1040
1041 Some(ops)
1042 })
1043 .sum::<i64>())
1044 .map(|ops| (ops + 1) / 2)
1045 .sum::<i64>()
1046 );
1047
1048 queries
1049 .iter()
1050 .map(|v| (v[0] as i64, v[1] as i64))
1051 .fold(0, |m_ops, (l, r)| m_ops + (1 + ops(r) - ops(l - 1)) / 2)
1052 }
1053}
1054
1055#[cfg(test)]
1056mod tests;