AtCoder Beginner Contest 260 B

https://atcoder.jp/contests/abc260/tasks/abc260_b

    let mut s = BTreeSet::<usize>::new();
    set_from_vec(&s, &ids1, X);

これだと怒られます。

40 |     set_from_vec(&s, &ids1, X);
   |                  ^^ types differ in mutability

これは、

    set_from_vec(&mut s, &ids1, X);

としないといけません。

// Better Students Are Needed!
#![allow(non_snake_case)]

use std::collections::BTreeSet;

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()
}

fn set_from_vec(s: &mut BTreeSet<usize>, v: &Vec<usize>, n: usize) {
    let N = s.len();
    for &e in v.iter() {
        if s.len() == N + n {
            break;
        }
        s.insert(e);
    }
}

fn main() {
    let v = read_vec();
    let N: usize = v[0];
    let X = v[1];
    let Y = v[2];
    let Z = v[3];
    let A: Vec<i32> = read_vec();
    let B: Vec<i32> = read_vec();
    
    let mut s = BTreeSet::<usize>::new();
    
    let mut ids1 = (0usize..N).collect::<Vec<usize>>();
    ids1.sort_by(|&a, &b| A[b].cmp(&A[a]));
    set_from_vec(&mut s, &ids1, X);
    
    let mut ids2 = (0..N).collect::<Vec<usize>>();
    ids2.sort_by(|&a, &b| B[b].cmp(&B[a]));
    set_from_vec(&mut s, &ids2, Y);
    
    let mut ids3 = (0..N).collect::<Vec<usize>>();
    ids3.sort_by(|&a, &b| (A[b] + B[b]).cmp(&(A[a] + B[a])));
    set_from_vec(&mut s, &ids3, Z);
    
    for i in s.iter() {
        println!("{}", i + 1)
    }
}