poj 2051 - Argus(더미)

1531 단어
이전에 했던 제목,,,, 우선 대열의 다중 병합은 유가후서P188을 보십시오.
최근 무더기를 배우고 있어서 수공으로 무더기로 우선 대열을 이루었다.
작은 지붕더미
코드는 다음과 같습니다.
struct Node
{
    int id;
    int period;
    int time;
    bool operator < (const Node &tmp) const
    {
        return time<tmp.time||(time==tmp.time&&id<tmp.id);
    }
    Node& operator = (const Node &tmp)
    {
        this->id = tmp.id;
        this->period = tmp.period;
        this->time = tmp.time;
        return (*this);
    }
};
Node node[3005];
int len;

void down(int p)//    
{
    int q;
    Node tmp = node[p];//        
    for( q = p*2; q <= len; q *= 2)
    {
        if(q<len&&node[q+1]<node[q])//             
            q = q+1;
        if(tmp<node[q])//              
            break;
        else//    
        {
            node[p] = node[q];
            p = q;
        }
    }
    node[p] = tmp;//       
}
void build()//    
{
    for(int i = len/2; i > 0; --i)//            
        down(i);
}
int main()
{
    char s[30];
    int cur = 1;
    while(scanf("%s", s) && s[0] != '#')
    {
        scanf("%d%d", &node[cur].id, &node[cur].period);
        node[cur].time = node[cur].period;
        ++cur;
    }

    len = cur-1;
    build();
    int k;
    scanf("%d", &k);
    while(k--)
    {
        printf("%d
", node[1].id); node[1].time += node[1].period;// , down(1); } return 0; }

좋은 웹페이지 즐겨찾기