Cod sursa(job #3129284)

Utilizator Gabryel9898Bizdoc Vasile Gabriel Gabryel9898 Data 13 mai 2023 20:01:16
Problema Datorii Scor 100
Compilator rs Status done
Runda Arhiva de probleme Marime 1.41 kb
use std::fs::File;
use std::io::{BufWriter, Write};

static INPUT_FILE: &str = "datorii.in";
static OUTPUT_FILE: &str = "datorii.out";

fn read_data() -> Vec<i64> {
    let content = std::fs::read_to_string(INPUT_FILE).expect("Cant open input file");

    let result: Vec<i64> = content.split_whitespace()
        .map(|line| line.parse::<i64>().unwrap())
        .collect();
    return result;
}

fn main() {
    let mut input_data = read_data();
    let mut output_buf = BufWriter::new(Vec::new());

    let end_of_db_arr = 2 + input_data[0] as usize;
    let (data, actions) = input_data.split_at_mut(end_of_db_arr);
    let data_slice = &mut data[2..];

    //println!("{:?} {:?}", data_slice, actions);
    for i in (0..actions.len()).step_by(3) {
        let (is_query, a, b) = (actions[i], actions[i+1], actions[i+2]);
        if is_query == 1 {
            let query_slice = &data_slice[a as usize - 1..b as usize];
            let sum: i64 = query_slice.iter().sum();
            writeln!(output_buf, "{}", sum).unwrap();
            // println!("query slice: {:?} sum = {}", query_slice, sum);
        } else {
            data_slice[a as usize - 1] -= b;
            // println!("data_slice: {:?}", data_slice);
        }
    }
    //println!("{}", std::str::from_utf8(output_buf.buffer()).unwrap());
    let mut output_file = File::create(OUTPUT_FILE).unwrap();
    output_file.write_all(&output_buf.into_inner().unwrap()).unwrap();
}