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;
    }

      

  • 相关阅读:
    LR网页细分图中的时间详解
    LoadRunner系列实例之— 01录制cas登陆脚本
    Oracle 身份证校验
    Oracle中执行存储过程call和exec区别
    MD5 加密的密码在数据库重置
    python学习 (二十九) range函数
    python学习 (二十八) Python的for 循环
    二十一 守护线程
    二十 线程的优先级
    十九 yield方法
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2118469.html
Copyright © 2011-2022 走看看