AtCoder Beginner Contest 381 D

https://atcoder.jp/contests/abc381/tasks/abc381_d

前から見て行って、1122の間だけ整数と位置の辞書を作って、1122でなくなったら辞書を削除して、同じ整数が出たらそこから前まで辞書から消します。

// 1122 Substring
#![allow(non_snake_case)]

use std::collections::HashMap;


//////////////////// library ////////////////////

fn read<T: std::str::FromStr>() -> T {
    let mut line = String::new();
    std::io::stdin().read_line(&mut line).ok();
    line.trim().parse().ok().unwrap()
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    read::<String>().split_whitespace()
            .map(|e| e.parse().ok().unwrap()).collect()
}


//////////////////// process ////////////////////

fn read_input() -> Vec<i32> {
    let _N: usize = read();
    let A: Vec<i32> = read_vec();
    A
}

fn F(A: Vec<i32>) -> usize {
    let N = A.len();
    let mut max_length: usize = 0;
    let mut start_pos: usize = 0;
    let mut dic_pos: HashMap<i32, usize> = HashMap::new();
    for i in 0..N {
        if (i - start_pos) % 2 != 0 {
            if A[i-1] == A[i] {
                match dic_pos.get(&A[i]) {
                    Some(&k) => {
                        dic_pos.insert(A[i], i-1);
                        for p in (start_pos..k).step_by(2) {
                            dic_pos.remove(&A[p]);
                        }
                        start_pos = k + 2
                    },
                    None    => {
                        dic_pos.insert(A[i], i-1);
                        let length = i - start_pos + 1;
                        if length > max_length {
                            max_length = length
                        }
                    }
                }
            }
            else {
                start_pos = i;
                dic_pos.clear()
            }
        }
        else {
            if i > 0 && A[i-1] == A[i] {
                start_pos = i - 1;
                dic_pos.clear();
                dic_pos.insert(A[i], i-1);
            }
        }
    }
    max_length
}

fn main() {
    let A = read_input();
    println!("{}", F(A))
}