• POJ 1442 Black Box 堆


    题目: http://poj.org/problem?id=1442

    开始用二叉排序树写的,TLE了,改成优先队列,过了。。

    两个版本都贴一下吧,赚稿费。。

     1 #include <stdio.h>
     2 #include <queue>
     3 #include <vector>
     4 using namespace std;
     5 priority_queue<int>qmax;
     6 priority_queue<int, vector<int>, greater<int> >qmin;
     7 
     8 int add[30010];
     9 
    10 int main()
    11 {
    12     int n, m, last = 0, get;
    13     scanf("%d %d", &n, &m);
    14     for(int i = 0; i < n; i++)
    15         scanf("%d", &add[i]);
    16     for(int i = 1; i <= m; i++)
    17     {
    18         scanf("%d", &get);
    19         while(last < get)
    20             qmax.push(add[last++]);
    21         while(qmax.size() >= i)
    22         {
    23             qmin.push(qmax.top());
    24             qmax.pop();
    25         }
    26         qmax.push(qmin.top());
    27         qmin.pop();
    28         printf("%d
    ", qmax.top());
    29     }
    30     return 0;
    31 }
    优先队列AC
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 struct node
     5 {
     6     int data;
     7     struct node *left, *right;
     8 };
     9 int add[30010], cnt;
    10 
    11 void build(struct node *&p, int k)
    12 {
    13     if(p == NULL)
    14     {
    15         p = (struct node *)malloc(sizeof(struct node));
    16         p->data = k;
    17         p->left = p->right = NULL;
    18         return;
    19     }
    20     if(p->data >= k)
    21         build(p->left, k);
    22     else build(p->right, k);
    23 }
    24 
    25 void seek(struct node *p, int x)
    26 {
    27     if(p == NULL || cnt > x)return;
    28     seek(p->left, x);
    29     if(cnt++ == x)
    30         printf("%d
    ", p->data);
    31     seek(p->right, x);
    32 }
    33 
    34 int main()
    35 {
    36     int n, m, last = 0, get;
    37     scanf("%d %d", &n, &m);
    38     struct node *root = NULL;
    39     for(int i = 0; i < n; i++)
    40         scanf("%d", &add[i]);
    41     for(int i = 1; i <= m; i++)
    42     {
    43         scanf("%d", &get);
    44         while(last < get)
    45             build(root, add[last++]);
    46         cnt = 1;
    47         seek(root, i);
    48     }
    49     return 0;
    50 }
    二叉排序树TLE
  • 相关阅读:
    整合Grafana
    Prometheus环境搭建
    RocketMQ单机部署
    记二进制搭建k8s集群完成后,部署时容器一直在创建中的问题
    接口重复提交解决方案
    记一次生产环境nginx图片上传不了的问题
    怎么进行中间件的学习
    MongoDB学习笔记之文档
    MongoDB学习笔记
    根据端口杀掉指定进程
  • 原文地址:https://www.cnblogs.com/wolfred7464/p/3261710.html
Copyright © 2020-2023  润新知