rust求助
查看原帖
rust求助
504403
VDLevUp楼主2023/11/29 20:12
use std::io;
use std::mem::swap;
static root:usize=1;
static mut Heap:[i32;1000010]=[0;1000010];
static mut sz:usize=0;
fn getmin()->i32{
    unsafe{
        return Heap[root];
    }
}
fn pushdown(u:usize){
    unsafe{
        if u<<1 > sz{
            return;
        }
        if Heap[u]<Heap[u<<1] && Heap[u]<Heap[u<<1|1]{
            return;
        }else if Heap[u<<1]<Heap[u<<1|1]{
            swap(&mut Heap[u<<1],&mut Heap[u]);
            pushdown(u<<1);
        }else{
            swap(&mut Heap[u<<1|1],&mut Heap[u]);
            pushdown(u<<1|1);
        }
    }
}
fn popmin(){
    unsafe{
        swap(&mut Heap[root],&mut Heap[sz]);
        sz-=1;
        pushdown(root);
    }
}
fn pushup(u:usize){
    
    if u==1{
        return;
    }
    unsafe{
        if Heap[u]<Heap[u>>1]{
            swap(&mut Heap[u],&mut Heap[u>>1]);
            pushup(u>>1);
        }
    }
    
}
fn pushv(v:i32){
    unsafe{
        sz+=1;
        Heap[sz]=v;
        pushup(sz);
    }
    
}
fn main(){
    let mut inp=String::new();
    io::stdin().read_line(&mut inp);
    let mut n:i32=inp.trim().parse().expect("");
    let mut opt:i32=0;
    let mut val:i32=0;
    let mut item:i32=0;
    while n!=0{
        n-=1;
        inp="".to_string();
        io::stdin().read_line(&mut inp);
        let mut getit=inp.split_whitespace();
        item=getit.next().unwrap().parse().unwrap();
        if item==1{
            item=getit.next().unwrap().parse().unwrap();
            pushv(item);
            continue;
        }else if item==2{
            println!("{}",getmin());
            continue;
        }else if item==3{
            popmin();
            continue;
        }
    }
}
2023/11/29 20:12
加载中...