Advertisement
paranid5

Trains sort

Jun 19th, 2020
301
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.78 KB | None | 0 0
  1. use std::io;
  2. use std::collections::VecDeque;
  3.  
  4. fn input() -> u32 {
  5.     let mut _s: String = String::new();
  6.     io::stdin().read_line(&mut _s).expect("read_line");
  7.     return _s.trim().parse().expect("convert");
  8. }
  9.  
  10. fn main() {
  11.     let _n = input() as usize;
  12.     let mut _pn: VecDeque<u32> = VecDeque::new();
  13.     _pn.resize(_n, 0);
  14.     for _i in 0.._n {
  15.         _pn[_i] = input();
  16.     }
  17.     let mut _sorts: Vec<u32> = vec![];
  18.     _sorts.resize(_n, 0);
  19.     for _i in 0.._n {
  20.         _sorts[_i] = _pn[_i];
  21.     }
  22.     _sorts.sort();
  23.     let mut _keep: VecDeque<u32> = VecDeque::new();
  24.     let mut _ans: Vec<(u32, u32)> = Vec::new();
  25.     for _i in 0.._n {
  26.         let mut _find = false;
  27.         let mut _count: u32 = 0;
  28.         if !_keep.is_empty() && _keep[_keep.len() - 1] == _sorts[_i] {
  29.             _find = true;
  30.             _keep.pop_back();
  31.             let _ans_s = _ans.len();
  32.             _ans[_ans_s - 1].1 += 1;
  33.         }
  34.         if !_find {
  35.             while !_pn.is_empty() && _sorts[_i] != _pn[0] {
  36.                 _keep.push_back(_pn[0]);
  37.                 _pn.pop_front();
  38.                 _count += 1;
  39.             }
  40.             if !_pn.is_empty() {
  41.                 _pn.pop_front();
  42.                 _count += 1;
  43.                 let _f = (1, _count);
  44.                 let _s = (2, 1);
  45.                 _ans.push(_f);
  46.                 _ans.push(_s);
  47.             } else {
  48.                 if _keep[_keep.len() - 1] != _sorts[_i] {
  49.                     print!("0");
  50.                     break;
  51.                 } else {
  52.                     _keep.pop_back();
  53.                     let _ans_s = _ans.len();
  54.                     _ans[_ans_s - 1].1 += 1;
  55.                 }
  56.             }
  57.         }
  58.     }
  59.     for _i in _ans.iter() {
  60.         println!("{} {}", _i.0, _i.1);
  61.     }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement