Pagini recente » Cod sursa (job #2561137) | Cod sursa (job #1099061) | Cod sursa (job #340669) | Cod sursa (job #2051542) | Cod sursa (job #3129284)
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();
}