zoukankan      html  css  js  c++  java
  • 贪心(优先队列优化)——pku3190

    比较好的贪心题
    也学会了优先队列吧
    思路:
    现对开始时间升序排序(再一次领教到了排序降维的意义!!!
    优先队列里放add(第几次stall),rr(结束时间)
    在把第一个放到优先队列,第二个数与优先队列顶部进行比较
    若第二个数结束时间>优先队列顶部结束时间,则更新该顶部时间
    否则 第二个数加到该优先队列里
    View Code
    #include<iostream>
    #include
    <cstdio>
    #include
    <algorithm>
    #include
    <queue>
    #include
    <string.h>
    using namespace std;

    int re[50009];
    struct da
    {
    int ll,rr;
    int no;
    }node[
    50009];

    struct data
    {
    friend
    bool operator<(data a,data b)
    {
    return a.rr>b.rr;//内部按val从小到大
    }
    int rr;
    int add;
    };

    bool cmp(da a,da b)
    {
    if(a.ll==b.ll)
    return a.rr<b.rr;
    else
    return a.ll<b.ll;
    }

    int main()
    {
    int n;
    while(scanf("%d",&n)!=EOF)
    {
    memset(re,
    0,sizeof(re));
    priority_queue
    <data> qq;
    int i;
    for(i=0;i<n;i++)
    {
    scanf(
    "%d%d",&node[i].ll,&node[i].rr);
    node[i].no
    =i;
    }

    sort(
    &node[0],&node[n],cmp);
    data fi;
    fi.rr
    =node[0].rr;
    fi.add
    =1;
    re[node[
    0].no]=1;
    qq.push(fi);
    int stall=1;

    for(i=1;i<n;i++)
    {
    if(qq.top().rr<node[i].ll)
    {
    re[node[i].no]
    =qq.top().add;

    data se;
    se.rr
    =node[i].rr;
    se.add
    =qq.top().add;
    qq.pop();
    qq.push(se);
    }
    else
    {
    stall
    ++;
    re[node[i].no]
    =stall;
    data se;
    se.rr
    =node[i].rr;
    se.add
    =stall;
    qq.push(se);
    }

    }

    printf(
    "%d\n",stall);
    for(i=0;i<n;i++)
    {
    printf(
    "%d\n",re[i]);
    }
    }
    return 0;
    }

      

  • 相关阅读:
    【转】一个lucene的官网例子
    mongodb(回滚)
    mongodb( 实现join)
    JSON.stringify && JSON.parse
    js下的面向对象
    node(规则引擎)
    objective-c(内存管理)
    STM32F0xx_USART收发配置详细过程
    STM32F0xx_GPIO配置详细过程
    STM32F0_新建软件工程详细过程
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2118469.html
Copyright © 2011-2022 走看看